你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> iOS7上leftBarButtonItem無法實現滑動返回的完美解決方案

iOS7上leftBarButtonItem無法實現滑動返回的完美解決方案

編輯:關於IOS

今天遇到了在iOS7上使用leftBarButtonItem卻無法響應滑動返回事件的問題,一番谷歌,最後終於解決了,在這裡把解決方案分享給大家。

  在iOS7之前的系統,如果要自定義返回按鈕,直接設置backBarButtonItem是不行的,有兩種方式,一種是用leftBarButtonItem替代;一種是:   [plain]    UIImage *backButtonImage = [[UIImage imageNamed:@"Graphics/Shared/navigation_back_button.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];   [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage  forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];   [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, backButtonImage.size.height*2) forBarMetrics:UIBarMetricsDefault];     但第二種方法只能自定義返回按鈕的背景和文字,如果要自定義上面的圖標則不行。所以使用leftBarButtonItem是最佳方式。 但是在iOS7系統中,自帶了可以通過右滑返回上一級頁面的手勢,如果僅僅修改leftBarButtonItem是無法響應這個手勢的。可以在pushViewController之後加入如下代碼:   [plain]    [_currentNav pushViewController:viewController animated:YES];   //開啟iOS7的滑動返回效果   if ([_currentNav respondsToSelector:@selector(interactivePopGestureRecognizer)]) {       _currentNav.interactivePopGestureRecognizer.delegate = nil;   }     這樣即可完美解決iOS7上無法滑動的問題。 當然網上還有一種解決方法是在設置leftBarButtonItem之後加上:   [plain]    self.navigationItem.backBarButtonItem = backButton;   self.navigationController.interactivePopGestureRecognizer.delegate = self;     但這兩行代碼必須放在viewWillAppear中,相比上一種方式要修改的代碼更多,因此建議使用上一種方式。 響應了iOS7的滑動返回手勢之後,我們還會發現一個問題,iOS7的滑動返回不會調用我們給leftBarButtonItem設置的回調,那麼返回的事件如何捕捉呢?可以通過以下代碼:   [plain]   - (void)viewWillDisappear: (BOOL)animated   {       [super viewWillDisappear: animated];       if (![[self.navigationController viewControllers] containsObject: self])       {           // the view has been removed from the navigation stack, back is probably the cause           // this will be slow with a large stack however.       }   }     至此,我們就完美解決了iOS7上使用leftBarButtonItem的滑動返回問題。
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved