IOS-自定義返回按鈕,保留系統滑動返回


自定義返回按鈕保留系統滑動返回手勢.gif

1.簡介

使用蘋果手機,最喜歡的就是用它的滑動返回.作為一個開發者,我們在編寫很多頁面的時候,總是會因為這樣那樣的原因使得系統的滑動返回不可用.使用導航欄push出一個控制器,我們在控制器中自定義了一個返回按鈕.這樣系統默認的滑動返回手勢效果就沒有了.

2.解決方法

[1]從A這個控制器push到B這個控制器,我們想要自定義B的返回按鈕,我們可以在A中設置

 1 self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"王儼" style:UIBarButtonItemStylePlain target:nil action:nil]; 

[2]在B控制器設置返回按鈕,我想這應該是大多數人喜歡的選擇,可是當我們在B控制器中設置self.navigationItem.leftBarButtonItem后發現系統的滑動返回手勢失效了.那么如何可以保留系統的滑動返回手勢了,我們可以B控制器中這樣做.

 1 @interface ViewController () <UIGestureRecognizerDelegate>
 2 @end
 3 
 4 @implementation ViewController {
 5     id<UIGestureRecognizerDelegate> _delegate
 6 }
 7 
 8 - (void)viewDidLoad {
 9         [super viewDidLoad];
10 
11         // 自定義返回按鈕
12         UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 44, 44)];
13         [button setTitle:@"王儼2" forState:UIControlStateNormal];
14         [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
15         [button addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside];
16 
17         self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:button];
18 }
19 
20 - (void)back:(UIButton *)button {
21         [self.navigationController popViewControllerAnimated:YES];
22 }
23 
24 - (void)viewWillAppear:(BOOL)animated {
25     [super viewWillAppear:animated];
26 
27     if (self.navigationController.viewControllers.count > 1) {
28           // 記錄系統返回手勢的代理
29         _delegate = self.navigationController.interactivePopGestureRecognizer.delegate;
30           // 設置系統返回手勢的代理為當前控制器
31         self.navigationController.interactivePopGestureRecognizer.delegate = self;
32     }
33 }
34 
35 - (void)viewWillDisappear:(BOOL)animated {
36     [super viewWillDisappear:animated];
37 
38      // 設置系統返回手勢的代理為我們剛進入控制器的時候記錄的系統的返回手勢代理
39     self.navigationController.interactivePopGestureRecognizer.delegate = _delegate;
40 }
41 
42 #pragma mark - UIGestureRecognizerDelegate
43 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
44         return self.navigationController.childViewControllers.count > 1;
45 }
46 
47 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
48     return self.navigationController.viewControllers.count > 1;
49 }
50 @end 

 

文/倚樓聽風雨wing(簡書作者)
原文鏈接:http://www.jianshu.com/p/33ce1340a543
著作權歸作者所有,轉載請聯系作者獲得授權,並標注“簡書作者”。


免責聲明!

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



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