ios ios 跨界面调用方法销毁会调用哪个方法

5346人阅读
- (void)viewDidDisappear:(BOOL)animated {
& &//因为点击登录离开页面时
& & if (YES ==&_popAsLoginFlag)
& & & & [self.navigationController&popToRootViewControllerAnimated:NO];
- (void)loginButtonClicked:(id)sender {
& & HSLoginViewController *loginVC = [HSLoginViewControllernew];
//& & [self.navigationController pushViewController:loginVC animated:YES];
& &//原来是从这里(个人设置页)直接push到登录页,由于登录完成后要转到首页,所以这里先把tabbar跳到首页,从首页push到登录页,这样就可以从登录页轻松跳到主页了
& & self.tabBarController.selectedIndex =&0;
& & [[self.tabBarController.viewControllers&objectAtIndex:0]&pushViewController:loginVC&animated:YES];
& &//标记一下,在这个页面消失时做相应处理
& & _popAsLoginFlag =&YES;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:444215次
积分:4418
积分:4418
排名:第4934名
原创:133篇
转载:38篇
评论:51条
(1)(2)(3)(4)(8)(10)(24)(9)(4)(4)(6)(5)(7)(8)(3)(2)(2)(4)(1)(4)(18)(10)(1)(1)(4)(1)(1)(1)(1)(1)(12)(2)(1)(8)查看: 1949|回复: 13
精华1在线时间82 小时帖子主题UID313008积分1270技术分325 资源分125 分享激情39 博客好友记录相册
实习工程师
知县, 积分 1270, 距离下一级还需 3730 积分
UID313008积分1270
15:52:41 上传
请问怎么从注销页面那里转到Login界面!
精华1在线时间126 小时帖子主题UID315056积分1729技术分1160 资源分14 分享激情126 博客好友记录相册
知县, 积分 1729, 距离下一级还需 3271 积分
UID315056积分1729
self.navigation popToRootViewController
我是奥巴·Mao,我喂自己袋盐!
精华0在线时间152 小时帖子主题UID65440积分4848技术分2974 资源分25 分享激情1307 博客好友记录相册
高级工程师
知县, 积分 4848, 距离下一级还需 152 积分
UID65440积分4848
把 主程序界面给移除掉, 把login界面显示出来
精华1在线时间82 小时帖子主题UID313008积分1270技术分325 资源分125 分享激情39 博客好友记录相册
实习工程师
知县, 积分 1270, 距离下一级还需 3730 积分
UID313008积分1270
起个名字半天劲 发表于
self.navigation popToRootViewController
你的方法根本去不了那个LOGIN的界面。只能移除到TAC的根界面那里。
精华1在线时间82 小时帖子主题UID313008积分1270技术分325 资源分125 分享激情39 博客好友记录相册
实习工程师
知县, 积分 1270, 距离下一级还需 3730 积分
UID313008积分1270
yangbo90 发表于
把 主程序界面给移除掉, 把login界面显示出来
说得具体一点行不?
&这个不知道怎么描述了。。。&
精华1在线时间82 小时帖子主题UID313008积分1270技术分325 资源分125 分享激情39 博客好友记录相册
实习工程师
知县, 积分 1270, 距离下一级还需 3730 积分
UID313008积分1270
还有。我的TBC是这样的
question_ViewController *questionView = [[question_ViewController alloc]initWithNibName:@&question_ViewController& bundle:nil];
& & UINavigationController *nav1 = [[UINavigationController alloc]initWithRootViewController:questionView];
& & questionView.title = @&近期提问&;
& & //& & questionView.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemDownloads tag:0];
& & questionView.tabBarItem = [[UITabBarItem alloc]initWithTitle:@&近期提问& image:image1 tag:0];
精华0在线时间210 小时帖子主题UID296201积分2215技术分1190 资源分91 分享激情5 博客好友记录相册
知县, 积分 2215, 距离下一级还需 2785 积分
UID296201积分2215
& & [self presentViewController:c animated:YES completion:nil];
精华0在线时间874 小时帖子主题UID257920积分19870技术分8647 资源分1000 分享激情320 博客好友记录相册
UID257920积分19870
方法很多,鉴定完毕。。。
精华1在线时间919 小时帖子主题UID286446积分22468技术分4693 资源分1965 分享激情4764 博客好友记录相册
高级工程师
内阁大臣, 积分 22468, 距离下一级还需 27532 积分
UID286446积分22468
为什么每次加载应用的时候都要判断登陆呢
倒计时了吗......
精华0在线时间152 小时帖子主题UID65440积分4848技术分2974 资源分25 分享激情1307 博客好友记录相册
高级工程师
知县, 积分 4848, 距离下一级还需 152 积分
UID65440积分4848
nexttime99 发表于
说得具体一点行不?
这个不知道怎么描述了。。。
精华1在线时间82 小时帖子主题UID313008积分1270技术分325 资源分125 分享激情39 博客好友记录相册
实习工程师
知县, 积分 1270, 距离下一级还需 3730 积分
UID313008积分1270
iphone5 发表于
为什么每次加载应用的时候都要判断登陆呢
因为要做自动登陆。
&我个人认为,你不用每次都必须经过登陆界面,你可以将登陆界面作为一个模态视图作为主界面的从属界面,每次加载主界面,在主界面里面判断当前的登陆状态,如果已经是登陆状态就不显示login界面,如果尚未登录,在加载&
精华1在线时间82 小时帖子主题UID313008积分1270技术分325 资源分125 分享激情39 博客好友记录相册
实习工程师
知县, 积分 1270, 距离下一级还需 3730 积分
UID313008积分1270
yangbo90 发表于
这个不知道怎么描述了。。。
但我的tab下边的nav都是一个新的nav。
UINavigationController *nav1 = [[UINavigationController alloc]initWithRootViewController:questionView];
每次调用popToRootViewControllerAnimated;都只能回到第一级页面。
还有怎么可以回到LOGIN页面???
&所以你要把tabbarViewController给移出掉 将loginView加到window上, 登陆成功后,把loginView移除掉,将tabbarView放在window上,注销后把把tabbarViewController给移出掉 将loginView加到window上, 登陆成功后,把&
精华1在线时间919 小时帖子主题UID286446积分22468技术分4693 资源分1965 分享激情4764 博客好友记录相册
高级工程师
内阁大臣, 积分 22468, 距离下一级还需 27532 积分
UID286446积分22468
nexttime99 发表于
因为要做自动登陆。
我个人认为,你不用每次都必须经过登陆界面,你可以将登陆界面作为一个模态视图作为主界面的从属界面,每次加载主界面,在主界面里面判断当前的登陆状态,如果已经是登陆状态就不显示login界面,如果尚未登录,在加载登陆界面,登陆成功后将登陆的信息保存到本地(比如用户名,登陆token值之类的),在注销登陆的时候将登录信息清空,这样来判断登陆状态比较好吧,菜鸟之我见,勿喷
倒计时了吗......
精华0在线时间152 小时帖子主题UID65440积分4848技术分2974 资源分25 分享激情1307 博客好友记录相册
高级工程师
知县, 积分 4848, 距离下一级还需 152 积分
UID65440积分4848
nexttime99 发表于
但我的tab下边的nav都是一个新的nav。
UINavigationController *nav1 = [initWithRootViewController:qu ...
所以你要把tabbarViewController给移出掉 将loginView加到window上, 登陆成功后,把loginView移除掉,将tabbarView放在window上,注销后把把tabbarViewController给移出掉 将loginView加到window上, 登陆成功后,把loginView移除掉,将tabbarView放在window上。。。。。。。。
十级贡献勋章
十级贡献勋章
九级光辉勋章
九级光辉勋章
二级精英勋章
二级精英勋章
三级英豪勋章
三级英豪勋章
四级英才勋章
四级英才勋章
五级至尊勋章
五级至尊勋章
六级尊贵勋章
六级尊贵勋章
七级卓越勋章
七级卓越勋章
八级荣誉勋章
八级荣誉勋章
DEVDIV博主
DEVDIV人才
及时将最新信息发给我
通过Email及时将最新的模板和服务发给我。
及时了解我们最新动态。关注我们的微博
官方微博: &&&尽量不要在viewWillDisappear:方法中移除通知 - 简书
<div class="fixed-btn note-fixed-download" data-toggle="popover" data-placement="left" data-html="true" data-trigger="hover" data-content=''>
写了7483字,被154人关注,获得了95个喜欢
尽量不要在viewWillDisappear:方法中移除通知
在了解控制器的生命周期之后,我们都知道viewWillAppear:方法是在控制器的view将要显示的时候调用的,而viewWillDisappear:方法是在控制器的view将要隐藏的时候调用。很多时候我们根据自身需要将相关代码逻辑添加到这两个方法中,我们看下如下代码片段:
监听键盘的通知代码
这段代码是在控制器的viewDidLoad:方法中注册了一个键盘弹出的通知和键盘隐藏的通知,然后在调用到相关方法时分别在控制台打印,在viewWillDisappear:界面即将隐藏的时候移除通知,具体效果如下图:
代码运行效果图
这看上去没什么问题,键盘的显示和隐藏也都能监听到。尼玛!被骗了!?其实并不然,细心的开发人员会知道,苹果在iOS7中增加了导航控制器侧滑返回功能,现在绝大多数App都使用了这项功能(有些App重写了自带的返回键之后忘记开启左滑返回手势了)。那么这项功能会带来什么问题呢?我们接着看下面的操作:
侧滑效果图
随着iPhone手机屏幕越来越大,左上角的返回按钮早已够不到(原谅我手小= =!),很多“手贱”的人喜欢通过这种侧滑的形式返回上一个界面(其实说的是我。。。),而这种侧滑返回会出现什么问题呢?当触发侧滑返回时会调用系统自带的viewWillDisappear:方法,在该方法中将监听键盘显示和隐藏的通知移除后,要是这时候用户取消了侧滑返回(即回到了原始状态),那么再点击界面上的textField唤出键盘,是不会发送键盘显示和隐藏的通知了,因为通知已被移除。。。那么遇到这种情况有什么方法解决么?我这里提供两种解决方案:1、将注册监听键盘显示和隐藏的代码放到viewWillAppear:方法中因为在触发侧滑返回后又取消侧滑,则会调用viewWillAppear:方法。那么如果侧滑返回将通知移除,则在取消侧滑时又会将通知重新添加进去。2、将移除通知的代码放到dealloc方法中dealloc方法是在控制器销毁之时调用的。这个时候移除通知而不是在viewWillDisappear:方法中移除可以有效避免上述的问题。既然控制器都销毁了,那么还留着相关的通知干嘛?该移除的移除。上面给出了两种解决方案,要说哪种最优,还得视情况而定。我在这里可以举个?。假如我们现在有这么个场景:在控制器的view上有个label,在label上添加一个手势(一般手势都是在创建完label之后添加的),假设我在viewWillDisappear:方法中移除该手势,则此时用户侧滑返回之时又取消侧滑返回,那么原先在label上的手势却再也添加不回来了(这里label一般在viewDidLoad方法中创建),因为viewDidLoad方法不会再次调用。而第二种方法却可以有效避免这种情况,这样就可以避免我这种“手贱”的任意捣鼓了。而第一种方案比较适合在这种情境下使用:当A控制器的view中有个文本输入框,需要监听键盘的显示和隐藏事件,当该页面push到B控制器时,若B控制器恰巧也需要监听键盘显示和隐藏事件,这时候若不将A控制器的监听事件给移除的话,那么B控制器中键盘显示或隐藏时,A控制器中也会接收到通知并作出相应的事件处理,而这有可能是我们不期望出现的,所以该情况下在viewWillAppear:方法中添加通知,在viewWillDisappear:方法中移除通知比较合适。最后,我们再来总结下重点:
1、iOS7新增加了导航控制器侧滑手势,当触发侧滑返回时,会调用系统的viewWillDisappear:方法,取消侧滑返回时又会调用viewWillAppear:方法。
2、在做手势和通知等一系列操作之时要分情况考虑:若通知和手势是与UI相关的,如监听UITextField键盘的显示和隐藏通知等应该在viewWillAppear:方法中添加通知,在viewWillDisappear:方法中移除通知;而与UI无关的通知和手势,像自定义通知等,应该在viewDidLoad等一次性方法中添加,在dealloc方法中释放。在此感谢 和 给以的指正。
3、在viewWillAppear:、viewWillDisappear:、viewDidAppear:、viewDidDisappear:等类似于这种会多次调用的系统方法中添加代码时,一定要多考虑业务逻辑,以免出现不必要的麻烦。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
iOS博客全集。
· 700人关注
· 6人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:

我要回帖

更多关于 ios调用拨号界面 的文章

 

随机推荐