记录一次小问题

苹果在iOS7的UINavigationController中加入了一个返回手势–interactivePopGestureRecognizer,因此支持iOS7以上版本,不用自己去实现一个手势去操作.
在iOS开发中,对于有些单独的一个ViewController页面等控制习惯性的喜欢在viewWillAppear生命周期方法中设置,因此在设置self.navigationController的interactivePopGestureRecognizer属性禁用系统时也会这样做.

1
2
3
4
5
6
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}

因为只有此单独一个页面禁用系统的手势返回,所以要让此ViewController自己去启动interactivePopGestureRecognizer. 在viewWillDisappear方法中去实现启动。

1
2
3
4
5
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}

测试的时候,当由ViewController通过push方法导航到下一个页面,然后执行手势返回的时候会发生页面卡住,但是按住Home键到后台,然后重新回到app确实可以返回到上一页面.

通过操作检查,当我们开始使用手势返回的时候,在执行interactivePopGestureRecognizer手势方法action=handleNavigationTransition: 时就开始执行上一个页面的viewWillAppear方法,而因此我在viewWillAppear方法中禁用了interactivePopGestureRecognizer返回手势,因此当前页面并没有看到pop动画,但确实是返回到上一页面.由此修改内容我们可以在viewDidAppear中,当页面已经显示的时候将方法禁用.

1
2
3
4
5
6
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}