控制器生命周期细节讲解

来源:互联网 发布:建筑外观效果图软件 编辑:程序博客网 时间:2024/06/16 05:46

许多APP都采用了侧滑控制器代替导航栏返回操作,不知道的效果伴们参考下面代码。

一、实现侧滑返回

第一步:在根导航栏控制器中加入如下代码:

id target =self.interactivePopGestureRecognizer.delegate;

    

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizeralloc] initWithTarget:targetaction:@selector(handleNavigationTransition:)];

    pan.delegate =self;

    [self.viewaddGestureRecognizer:pan];

    

    self.interactivePopGestureRecognizer.enabled =NO;


第二步:遵守代理方法、并实现代理方法

@interface LenNavigationController ()<UIGestureRecognizerDelegate>


- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {

    if (self.childViewControllers.count == 1)

    {

        return NO;

    }

    return YES;

}


别以为这样就可以了,接下来你可能会遇到一些侧滑返回的问题,小编我就遇到了,测试不停的提bug过来,简直快爆炸了。

这种侧滑如果所有页面都有显示导航栏的话基本不用做下面的操作,怕就怕有些地方需要隐藏导航栏,全屏显示页面,不用担心,新编教你一招。


二、侧滑返回导致导航栏标题显示错误

一级页面没有显示导航栏,二级页面显示导航栏,在侧滑返回拖拽不完全时,导航栏上的标题惨不忍睹,解决办法就是我们需要在控制器UIViewController中添加视图生命周期方法ViewWillApper  ViewWillDisapper,页面出现和消失,相信很多初级开发者都是直接写代码了,一般不会添加代码:

[super viewWillDisappear:animated];

[super viewWillAppear:animated];
切记,不管什么时候都要添加这行代码,重写父类的方法。在本文中这是关键的一步

animated,在页面生命周期方法中都会传来这个值,animated就是上一个视图显示或消失时的动画,也可以说是状态,我们要做的就是记下这个状态,在页面即将消失或者出现时用上,页面就不会出现一些显示问题。直接上代码:

1⃣️[self.navigationControllersetNavigationBarHidden:NOanimated:animated];//以页面消失为例

不建议用下面代码:

2⃣️self.navigationController.navigationBarHidden =NO;

代码2⃣️就会导致侧滑时导航栏标题显示错误,push到子页面时,导航栏标题还是上一个页面的。具体为什么会出现这个问题,小编一开始也没搞懂,一万个为什么从眼前飘过,后面经过调试,找到解决方法就是方法1⃣️,然后在需要的地方添加这行代码,此类测试的bug瞬间就解决了。


不知道各位大神or菜鸟们你们是否也遇到同样的问题,如果看了我写的还不明白的可以加Q363819948联系,小编是非常乐意与您交流的技术的








0 0
原创粉丝点击