简体   繁体   中英

Why isn't viewWillDisappear or viewDidAppear being called?

I have a UINavigationController with a UITableView as my main menu. User clicks on a cell and a new view is pushed on the stack. In one case I push another UITableView that needs a toolbar. So on that 2nd tableView's init I setup the self.toolbarItems property with the correct items. But then I need to call [self.navigationController setToolbarHidden:NO animated:YES]; So it makes sense to call this in the viewDidAppear or viewWillAppear method. But I put it in those methods and find out (Also via NSLog) that they never get called. The same goes for hiding it in viewWillDisappear or viewDidDisappear . Why don't these methods get called? Where should I be doing this hiding/showing of the toolbar then?

I have noticed behavior where if a parent controller (like UINavigationController or UITabBarController ) never get's viewWill/DidAppear called on it, it won't call it on the child controllers either. So make sure that in the code where you create the parent controller, you call viewWillAppear , show it, then call viewDidAppear . Then it should make those calls on it's child controllers as is appropriate.

Double check the parent controller is having those methods called, and call them yourself if they are not.

Yes Its true

you can do this by first write this code in

- (void)viewDidLoad {
    self.navigationController.delegate = self;  
}

And then write the code which you want to write in viewWillAppear

- (void)navigationController:(UINavigationController  *)navigationController didShowViewController:(UIViewController  *)viewController animated:(BOOL)animated {

    if ([viewController isKindOfClass:[self class]]) {
        //write your code here
    } 
}

虽然你解决了你的问题,但如果将来有人出现,另一个问题可能是你忘记了任何一种方法的动画:参数 - 也就是说,方法的格式需要如下所示:

- (void) viewWillAppear:(BOOL)animated

i noticed the same issue in iOS7. When i'm using both tab bar (2 buttons A, B) and navigation controller.

A has two views. One with tableview and second displays data according to the selection from the table view.

B has is the only view.

Button which is refer to another separate view D, placed in both tab bar views (A & B) and in both views of A.

Problem arises when i click the button from tab item B, viewWillAppear and viewDidLoad not called.

So i solved this issue by presentModalViewController:animated: and to come back i used dismissModalViewControllerAnimated: , just when i go to view D from tab item B.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM