iOS7上leftBarButtonItem無法實現滑動返回的完美解決方案
在iOS7上使用leftBarButtonItem卻無法響應滑動返回事件的問題,一番谷歌,最后終于解決了,在這里把解決方案分享給大家。
在iOS7之前的系統,如果要自定義返回按鈕,直接設置backBarButtonItem是不行的,有兩種方式,一種是用leftBarButtonItem替代;一種是:
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];
但是在iOS7系統中,自帶了可以通過右滑返回上一級頁面的手勢,如果僅僅修改leftBarButtonItem是無法響應這個手勢的。可以在pushViewController之后加入如下代碼:
[_currentNav pushViewController:viewController animated:YES]; //開啟iOS7的滑動返回效果 if ([_currentNav respondsToSelector:@selector(interactivePopGestureRecognizer)]) { _currentNav.interactivePopGestureRecognizer.delegate = nil; }
這樣即可完美解決iOS7上無法滑動的問題。
當然網上還有一種解決方法是在設置leftBarButtonItem之后加上:
self.navigationItem.backBarButtonItem = backButton; self.navigationController.interactivePopGestureRecognizer.delegate = self;
但這兩行代碼必須放在viewWillAppear中,相比上一種方式要修改的代碼更多,因此建議使用上一種方式。
響應了iOS7的滑動返回手勢之后,我們還會發現一個問題,iOS7的滑動返回不會調用我們給leftBarButtonItem設置的回調,那么返回的事件如何捕捉呢?可以通過以下代碼:
- (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的滑動返回問題。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!