版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liyux4869/article/details/39379769
iOS7中新增了许多特性,其中有一项新特性--左侧滑屏(从屏幕左侧边缘向右侧滑动时会调用popViewController这个方法,和点击了后退按钮一样的效果),虽说这个新特性的确增加了新奇的用户体验,但是这其中也是有一个比较坑爹的BUG,就是左侧滑屏会影响按钮的点击事件。
如果你在靠近屏幕左侧一定距离内构造一个按钮的话,你就会发现按钮无法点击。因为按钮的点击事件被“左侧滑屏”这个系统机制截胡了,左侧滑屏的机制抢先响应了点击事件,导致按钮无法获取到点击事件。这里我找到两个解决方法。
方法一:关闭左侧滑屏机制。
重载viewWillAppear:animated方法,将左侧滑屏机制关闭,如下;
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO];
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
}
然后在viewWillDisappear:animated方法中,将左侧滑屏恢复,
- (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
}
要注意的是关闭左侧滑屏机制的代码必须写在viewWillAppear:animated或者viewDidAppear:animated方法,因为在init方法和viewDidLoad方法时self.navigationController还没有被上一级的ViewController赋值,是nil。这时对navigationController的操作是无效的。
方法二:使用UITapGestureRecognizer代替按钮的点击事件
将按钮的target事件取消,新建UITapGestureRecognizer来处理按钮的响应事件的方法,然后将tapGesture添加到按钮上。
以上两种方法其实都不太好。方法一取消左侧滑屏功能,因为关闭了系统的原生功能,这是APPLE不推荐的。方法二会导致按钮没有点击按下的效果。不过目前我只找到这两种方法就只会先将就着用了。