當咱們使用代碼或者用storyboard來建立一個新的控制器的時候~咱們不多注意導航欄的leftItem~由於正常狀況下~push到下一個界面的leftItem就是上一個界面的self.title~而且它也就是一個返回的功能~因此~咱們不多去在乎這些~但當咱們有些需求~須要自定義leftItem的時候~那麼問題就來了~程序員
問題一:怎麼自定義leftItemxcode
問題二:爲何系統自帶的右滑返回手勢失效,怎麼解決這個失效問題ide
1.怎麼自定義leftItemspa
其實~這個東西嘛~說簡單也是很簡單的~由於~咱們很明確的知道~左導航欄就一個功能~那就是返回上一個界面~很顯然~是須要用戶交互的~必用按鈕~
說多了都是廢話~直接上代碼~
//自定義一個按鈕
code
UIButton *leftBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [leftBtn setTitle:@"返回" forState:UIControlStateNormal]; [leftBtn addTarget:self action:@selector(backLastView) forControlEvents:UIControlEventTouchUpInside]; leftBtn.frame = CGRectMake(0, 0, 60, 40); [leftBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; //將leftItem設置爲自定義按鈕 UIBarButtonItem *leftItem =[[UIBarButtonItem alloc]initWithCustomView: leftBtn]; self.navigationItem.leftBarButtonItem = leftItem;
//按鈕點擊事件 返回上一個界面
orm
- (void)backLastView{ [self.navigationController popViewControllerAnimated:YES]; }
須要注意的是~xcode自動從6.0以後~leftItem距左屏幕邊距有16個像素點~這樣會致使在視覺上會感受有點偏右~不算美觀~然而對於大多數處女座的程序員來講~這明顯是不能讓人去接受的~解決辦法有不少~在這裏提供一個最爲方便的方法~設置一下按鈕的contentEdgeInsets(文字)imageEdgeInsets(圖片)屬性便可~如:leftButton.contentEdgeInsets = UIEdgeInsetsMake(0, -16, 0, 0);事件
3.怎麼解決這個失效問題
其實很簡單很簡單~只須要添加下面這一句代碼便可self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
圖片