統(tǒng)一設置 " 返回 " 按鈕

方法一 : 在 NavigationController 中, 重寫父類的push方法

/**
* 攔截所有push進來的子控制器
* @param viewController 每一次push進來的子控制器
*/
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
  //    if (不是第一個push進來的子控制器) {
  if (self.childViewControllers.count >= 1) {
      // 左上角的返回
      UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
      [backButton setTitle:@"返回" forState:UIControlStateNormal];
      [backButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
      [backButton setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
      [backButton setImage:[UIImage imageNamed:@"navigationButtonReturn"] forState:UIControlStateNormal];
      [backButton setImage:[UIImage imageNamed:@"navigationButtonReturnClick"] forState:UIControlStateHighlighted];
      [backButton sizeToFit];
      [backButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
      backButton.contentEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0);
      viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
      viewController.hidesBottomBarWhenPushed = YES; // 隱藏底部的工具條
  }

  // super的push方法一定要寫到最后面
  // 一旦調用super的pushViewController方法,就會創(chuàng)建子控制器viewController的view
  // 也就會調用viewController的viewDidLoad方法
  [super pushViewController:viewController animated:animated];
}
- (void)back
{
  [self popViewControllerAnimated:YES];
}

方法二 : 在BaseViewController 中, 寫一個 - (void)setupNavigationwithTitle:(NSString *)title; 方法, 然后, 在需要 "返回" 按鈕的頁面, 調用此方法.

/**
 *  設置navigationbar的title(同時還默認的包含有設置返回按鈕為黑色)
 *
 *  @param title title的內容
 */
- (void)setupNavigationwithTitle:(NSString *)title;

- (void)setupNavigationwithTitle:(NSString *)title {
    
    UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    backBtn.frame = CGRectMake(0.0, 0.0, 80.0, 40.0);
    UIImageView *backImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"back_black"]];
    backImg.frame = CGRectMake(-14.0, 2.0, 30.0, 40.0);
    [backBtn addSubview:backImg];
    
    UILabel *backLabel = [[UILabel alloc]init];
    backLabel.text = @"返回";
    backLabel.textColor = [UIColor whiteColor];
    backLabel.font = [UIFont systemFontWithSize:16.0f];
    backLabel.frame = CGRectMake(10, 2.0, 40, 40);
    
    [backBtn addSubview:backLabel];
    
    [backBtn addTarget:self
                action:@selector(btnItemClick)
      forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
    [self.navigationItem setLeftBarButtonItem:leftButton];
    
    self.title = title;
    
}
- (void)btnItemClick
{
    [self.navigationController popViewControllerAnimated:YES];

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1.自定義控件 a.繼承某個控件 b.重寫initWithFrame方法可以設置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,716評論 2 4
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,667評論 30 472
  • 轉至元數據結尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數據起始第一章:isa和Class一....
    40c0490e5268閱讀 2,106評論 0 9
  • (一) 記憶中,那片長著青苔的石階上,總坐著一個光頭的老頭兒和一個光頭的小孩兒。老頭兒總是拿著一根煙桿和一些葉子煙...
    北極毛毛蟲閱讀 474評論 15 5
  • 現實就是這樣殘忍的東西,它總在你不能察覺的時候,一點一點摧毀你的信仰,摧毀你以為自己可以給出的承諾?!吨挛覀兘K...
    棠棣樹閱讀 238評論 0 1

友情鏈接更多精彩內容