iOS开发的技巧和经验总结(系列三)

杀马特。学长 韩版系。学妹 提交于 2020-03-01 08:41:14

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,不执行下面的方法。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!