1、iOS7添加NavigationItem,不能通过手指向左滑动pop到前一个页面
在iOS7中,由当前页面ViewController1 push到新的页面ViewController2的时候,我们可以通过滑动手指来返回到前一个页面,这是iOS7内置的新特性,效果如下图所示,
但是,当我们在给ViewController添加self.navigationItem的时候,就不能通过手指来滑动回去了,本来我没有注意到这个问题,后来leader要我能够解决这个bug,有没有觉得这个问题该怎么在google上面提问都不知道,我找了半天,在stackoverflow找到了答案,就是在viewDidAppear和viewDidDisappear添加如下代码,就是delegate的设置,
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
注:如果写在viewDidLoad中,还是没有效果的。
2、UILongPressGestureRecognizer绑定的方法执行了两次
我做了一个功能是长按Button,弹出一个视图菜单,这就需要使用长按手势,写完了发现绑定的方法执行了两次,如果是赋值操作那还无所谓,因为赋值我们是看不见的,第二次赋值将原来的值覆盖,但是这里是弹出视图,执行了两次就对应了视图菜单弹出了两次,因为LongPress有多个状态,例如Began、Changed、Ended等等,所以按下去时候对应Began,会执行一次;抬起来时候Ended再次执行一次。如果你再移动手指位置,那么应该还会执行一次,这就是为什么LongPress执行多次的原因了。
在网上搜到的解决方法如下,
- (void)Longress:(UIGestureRecognizer *)gestrue
{
if (gestrue.state != UIGestureRecognizerStateBegan)
{
return;
}
//下面写上想要执行的操作
[... ...]
self.xxx = xxx;
}
这里就是return语句的精髓所在了,如果符合判断条件,直接return,不执行下面的方法。
来源:oschina
链接:https://my.oschina.net/u/1458418/blog/221001