ios 销毁当前页面重新开启_ios开发之从某个页面返回后刷新当前页面

本文介绍了如何在iOS应用中,当从一个界面返回时,不修改当前页面代码的情况下实现页面刷新。通过实现UINavigationControllerDelegate,设置导航控制器的代理,并在`navigationController:willShowViewController:animated:`方法中判断即将显示的页面类型,执行刷新操作。同时,为了避免内存泄漏,需要在非当前页面时移除代理。这种方法避免了在多个页面中重复添加刷新逻辑,提高了代码的可维护性。
摘要由CSDN通过智能技术生成

开发中总是有从一个界面返回后刷新当前页面的需求,为了减少耦合性,尽量不在当前页面加代码,在返回的界面添加以下方法:- (void)navigationController:(UINavigationController*)navigationController willShowViewController:(UIViewController*)viewController animated:(BOOL)animated;

此方法是UINavigationControllerDelegate的方法,本类需要遵循UINavigationControllerDelegate,还需设置NavigationController的代理为本类,在ViewWillApear:方法中设置:- (void)viewWillAppear:(BOOL)animated{

[superviewWillAppear:animated];

self.navigationController.delegate=self;

}

在- (void)navigationController: willShowViewController: animated:方法中添加以下代码:- (void)navigationController:(UINavigationController*)navigationController willShowViewController:(UIViewController*)viewController animated:(BOOL)animated{

if([[viewController class]isSubclassOfClass:[目标类 class]]) {

///执行刷新操作

}

///删除代理,防止该controller销毁后引起navigationController.delegate指向野指针造成崩溃

if(![[viewController class]isSubclassOfClass:[self class]]) {

self.navigationController.delegate=nil;

}

}

之前试过在viewWillDisappear:中删除代理,发现viewWillDisappear:会在 -(void)navigationController: willShowViewController: animated:前执行,就不会进入- (void)navigationController: willShowViewController: animated:执行刷新操作了。

然后又试了在viewDidDisappear:中删除代理,但是会造成该controller销毁后引起navigationController.delegate指向野指针,造成崩溃,不知为什么。

所以就使用了正文中用到的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值