ios开发之从某个页面返回后刷新当前页面

开发中总是有从一个界面返回后刷新当前页面的需求,为了减少耦合性,尽量不在当前页面加代码,在返回的界面添加以下方法:

- (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指向野指针,造成崩溃,不知为什么。

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

你可能感兴趣的:(ios开发之从某个页面返回后刷新当前页面)