关于通过UINavigationController push 过去到一个view controller而这个viewvontroller的viewwillappear不执行的问题

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

今天在项目中发现了一个问题,就是当我从一个viewcontrollerA push 到另外一个viewcontrollerB时,viewcontrollerB的viewwillappear这个方法没有执行。这下子可坏了,因为我要在viewcontrollerB中隐藏我的正式的导航栏添加自己写的加的导航栏,在viewwilldisappear中把真实的导航栏让他显示出来。怎么办呢,经过了种种方法无效后,看到了一片国外的帖子,虽然具体的内容只能看个大概,但是通过大概的浏览并配合其中贴出来的方法还是圆满解决了而我的问题,下面就让我把解决问题的过程写出来吧。


1.我在一个继承于UITabbarviewcontroller的viewcontroller中写了5个viewcontroller并将其放在5个navigationcontroller中,然后将这5个nav添加在uitabbarviewcontroller中。

2.我在其中一个nav中push到一个view controller中,这时,view controller的viewwillappear不执行;

3,我在继承于TabbarController的。m中写上

-(void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    [nav1 viewWillDisappear:animated];

    [nav2 viewWillDisappear:animated];

    [nav3 viewWillDisappear:animated];

    [nav4 viewWillDisappear:animated];

    [nav5 viewWillDisappear:animated];

}



-(void)viewWillDisappear:(BOOL)animated {

    [super viewWillDisappear:animated];

    [nav1 viewWillDisappear:animated];

    [nav2 viewWillDisappear:animated];

    [nav3 viewWillDisappear:animated];

    [nav4 viewWillDisappear:animated];

    [nav5 viewWillDisappear:animated];

}

-(void)viewDidAppear:(BOOL)animated {

    [super viewDidAppear:animated];

    [nav1 viewWillDisappear:animated];

    [nav2 viewWillDisappear:animated];

    [nav3 viewWillDisappear:animated];

    [nav4 viewWillDisappear:animated];

    [nav5 viewWillDisappear:animated];

}

-(void)viewDidDisappear:(BOOL)animated {

    [super viewDidDisappear:animated];

    [nav1 viewWillDisappear:animated];

    [nav2 viewWillDisappear:animated];

    [nav3 viewWillDisappear:animated];

    [nav4 viewWillDisappear:animated];

    [nav5 viewWillDisappear:animated];

}


运行程序,完美解决问题。

对于我的英语能力不是很好,为了让大家能够更好的明白其中道理,特把外文地址附上:http://davidebenini.it/2009/01/03/viewwillappear-not-being-called-inside-a-uinavigationcontroller 。

iOS 记录viewWillAppear执行的一种情况 当在Avc上present一个Bvc时,如果Bvc使用overFullScreen模式推出,dismiss后,Avc的viewWillAppear执行,需要改为fullScreen模式。 阅读详情

相关推荐

viewWillDisappear,viewWillAppear调用的解决方法

产生原因是用了UINavigationController.  将UINavigationControllerview作为subview添加到了其他viewControllerview中。  或者把UINavigationController添加到UITabbarController中了。  此时,NavigationController的stack里面的viewContro

火海夕 6712

(转)关于-viewWillAppear:等无法调用的总结

今天也遇到了这样的问题。 产生原因是用了UINavigationController. 将UINavigationControllerview作为subview添加到了其他viewControllerview中。 或者把UINavigationController添加到UITabbarController中了。 此时,NavigationController...

weixin_30737363的博客 298

UINavigationController下的viewcontroller调用viewwillappear

UIViewController A下添加了一个navigationcontroller,通过navigationcontrollerpushViewController ,A 切换到B,然后再从B切换回A,此时,如何通知A 已经切换回来了?因为可能需要更新A上的数据。本来打算viewwillappear,但切换回来的时候,就是能调用到A上的viewwillappear. 其实,是

一天到晚游泳的鱼 3534

UITabBarController视图切换时,界面跳动

使用UITabBarController做根视图控制器, 且有些UIViewController隐藏UINavigationController时,在切换视图控制器时,会出现页面跳动情况。 原因在于设置隐藏或显示时,设置了动画为YES,如: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; ...

番薯大佬的专栏 957

addChildViewController后 Childvc viewWillAppear 调用的问题

addChildViewController viewWillAppear

allanGold 2134

【iOS】ViewController的生命周期

在iOS中一般有两种ViewController,一类是用于显示内容的,比如UIViewController,UITableVIewController或者自定义的VC等,另一类是容器型的控制器,如UINavigationController(内部维护一个栈,前面博客中有所讲解,用push,pop进行控制),UITabBarController(内部维护一个数组)等。容器型 VC = 用来管理多个内容 VC 的关系(栈 or 数组)内容型 VC = 页面本身(展示内容和逻辑)

2401_86200358的博客 487

viewWillAppear执行

UITableViewController或UIViewController中使() 后viewWillAppear:(BOOL)animated执行 解决方法如下: 先在 *.h 头文件里加上 接着在*.m 文件里加上相关代码 self.navigationController.delegate=self; 再使用此时naviga

u012871476的博客 3142

viewDidUnload,viewDidLoad,viewWillAppear,viewWillDisappear的作用以及区别

viewDidLoad:在视图加载后被调用 viewWillAppear:视图即将可见时调用。默认情况下执行任何操作 viewDidAppear: 视图已完全过渡到屏幕上时调用 viewWillDisappear:视图被驳回时调用,覆盖或以其他方式隐藏。默认情况下执行任何操作 viewDidDisappear:视图被驳回后调用,覆盖或以其他方式隐藏。默认情况下执行任何操作 Ps...

mmdev 227

iPhone开发之解决viewWillAppear被调用

经常会发现,viewWillAppear那一系列函数被调用,原因其实很简单,只有window上面的view的contoller中的viewWillAppear才会被调用,而我们常常会用addSubview的方法添加view,这样被添加的view就没有直接加入到window中,就无法调用viewWillAppear。 那么怎样让view都添加到window中呢: EWorkSpaceA

zhangkongzhongyun的专栏 1697

添加子视图控制器时,子视图控制器的viewWillAppear方法调用

直接贴代码: [baseController beginAppearanceTransition:true animated:false]; [self.view addSubview:baseController.view]; [baseController endAppearanceTransition]; [self addChildViewContro

春天的小马扎 3351

addChildViewControllerviewDidAppear方法得到调用的问题

今天遇到一个无比诡异的问题,原因在于viewDidLoad方法得到调用,而viewDidAppear方法得到调用,导致viewDidAppear方法中的代码得执行。本文写了个Demo,完整地模拟了这个场景。

Jymn_Chen 6064

iphone开发之解决viewWillAppear失效

你可曾遇到过viewWillAppear没有被调用到的情况 产生原因是用了UINavigationController.   将UINavigationControllerview作为subview添加到了其他viewControllerview中。  或者把UINavigationController添加到UITabbarController中了。  此时,Navigatio

晓月的专栏 966

ios 自定义tabbar时 viewDidAppear调用

自定义tabbar点击其他item时,默认controllerviewDidAppear的相关函数都自动调用。在论坛逛了半天终于有人给出正确的解决办法。这里贴出来,以备时之需。-(void)viewWillAppear:(BOOL)animated { [self.selectedViewController beginAppearanceTransition: YES animat

it_male的博客 2057

ios的视图控制器的viewWillAppearviewDidAppear什么时候被调用

翻译自: http://stackoverflow.com/questions/5277940/why-does-viewwillappear-not-get-called-when-an-app-comes-back-from-the-backgroun viewWillAppearviewDidAppear什么时候被调用 问: 当我向一个UINavigationController...

hunxiejun 468

如何使用tabbar和navigationController时调用viewWillAppear

采用如下方式: App—>RootViewController—>UINavigationController—>UIViewController 发现UIViewController接收viewWillAppear相关的四个函数。 经过多次试验,发现如下方法,可以解决: 在RootViewController的Init中加入如下代码(红色字体) tabBarController.viewControllers = [NSArray arrayWithObjects:tabNav1,ta

DragonCheng的专栏 6326

为什么viewDidAppear调用?什么时候调用

苹果的文档是这样描述的: If the view belonging to a view controlleris added to a view hierarchy directly, the view controller will not receivethis message. If you insert or add a view to the view hierarchy, and ...

wangpengfei360 406

IOS app中有两个UITabBarController,即在第一个页面有4个按钮,进入子页面底部也有几个按钮

对于一个app中有两个TabBar,大部分 认为该UI够友好,也符合苹果的人机交互,在这有该讨论的 我们先看下效果图 事实上我们有两种解决方案 1.在子页面底部的tabbar我们可以用按钮代替,跟之前博客说在导航栏上UISegmentedControl,切换显示同的VC,2、在app中添加2个tabbar。方案1,在此再赘述,可参考之前的那片博客,直接看下方案21)、新建一个VC继承U

夏天的风轻轻吹过~~ 4960
上一篇: 获取某一个view所在视图控制器,进而可以进行跳转等操作
下一篇: 获取app版本和名称
MingerW
博客等级 码龄12年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值