設置二級導航欄的返回按鈕


1. 一般情況下的導航欄跳轉,當在一級界面跳轉到二級界面的時候,左item的會出現 “返回箭頭+一級導航欄的標題”;

比如說:一級導航欄是“白菜精華”,那么二級導航欄的返回鍵是 :

 

2. 當我們使用下方的代碼(下方代碼是在一級界面寫)時,確實可以當跳轉到二級界面的時候,左上角是“返回圖標 + 返回”;

 self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStyleDone target:nil action:nil];

 

但是 當二級界面 push 到三級界面的時候,還是需要上方的代碼寫在二級界面中。當項目有10個以上的界面,看着就會很臃腫。所以,可以攔截 導航欄的push方法。在這個方法中進行統一的修改。

 

3. 自定義導航控制器,重寫它的push方法

3.1 創建“WYNavigationController:UINavigationController” , 在.m 方法中寫 :

/**
 * 可以在這個方法中攔截所有push進來的控制器
 */
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [super pushViewController:viewController animated:NO];
    
    // target 傳空也會有一個默認的點擊 方法可以用來返回到上一個界面
    viewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStyleDone target:nil action:nil];
}

 

3.2  使用上列方法給返回按鈕修改文字顏色的時候會出現,只能設置普通文字顏色,不能設置點擊的時候的文字顏色:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    // 返回文字顏色修改
    self.navigationBar.tintColor = [UIColor blueColor];
}

 

所以,返回按鈕的顏色修改,不是使用的 3.1 的方法設置的。而是使用UIButton的。

寫法如下:

/**
 * 可以在這個方法中攔截所有push進來的控制器
 */
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (self.childViewControllers.count > 0) { // 如果push進來的不是第一個控制器
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button setTitle:@"返回" forState:UIControlStateNormal];
        [button setImage:[UIImage imageNamed:@"navigationButtonReturn"] forState:UIControlStateNormal];
        [button setImage:[UIImage imageNamed:@"navigationButtonReturnClick"] forState:UIControlStateHighlighted];
        button.size = CGSizeMake(70, 30);
        // 讓按鈕內部的所有內容左對齊
        button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
//        [button sizeToFit];
        // 讓按鈕的內容往左邊偏移10
        button.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0);
        [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
        [button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
        viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
        // 隱藏tabbar
        viewController.hidesBottomBarWhenPushed = YES;
    }
    
    // 這句super的push要放在后面, 讓viewController可以覆蓋上面設置的leftBarButtonItem
    [super pushViewController:viewController animated:animated];
}

- (void)back
{
    [self popViewControllerAnimated:YES];
}

 

 

 

 

 

導航控制器補充1:

/**
 * 可以在這個方法中攔截所有push進來的控制器
 */
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    // 當 animated 為 NO 的時候,就代表所有push進來的導航控制器都沒有動畫效果。
    [super pushViewController:viewController animated:NO];
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM