Почему не вызывается viewWillDisappear или viewDidAppear? - PullRequest
7 голосов
/ 27 ноября 2010

У меня есть UINavigationController с UITableView в качестве основного меню.Пользователь щелкает ячейку, и в стек помещается новое представление.В одном случае я нажимаю другой UITableView, который нуждается в панели инструментов.Таким образом, в этом init 2-го tableView я установил свойство self.toolbarItems с правильными элементами.Но тогда мне нужно вызвать [self.navigationController setToolbarHidden:NO animated:YES]; Так что имеет смысл вызывать это в методе viewDidAppear или viewWillAppear.Но я помещаю это в эти методы и выясняю (также через NSLog), что они никогда не вызываются.То же самое касается сокрытия этого в viewWillDisappear или viewDidDisappear.Почему эти методы не вызывают?Где мне тогда делать это скрытие / показ панели инструментов?

Ответы [ 4 ]

18 голосов
/ 27 ноября 2010

Я заметил поведение, когда родительский контроллер (например, UINavigationController или UITabBarController) никогда не получает viewWill/DidAppear, вызываемый им, он также не вызывает его на дочерних контроллерах. Поэтому убедитесь, что в коде, где вы создаете родительский контроллер, вы вызываете viewWillAppear, показываете его, а затем вызываете viewDidAppear. Затем он должен выполнить те вызовы на своих дочерних контроллерах, как это необходимо.

Дважды проверьте, что родительский контроллер вызывает эти методы, и вызовите их сами, если они не вызваны.

4 голосов
/ 27 ноября 2010

Да Это правда

Вы можете сделать это, сначала написав этот код в

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

А затем напишите код, который вы хотите написать в viewWillAppear

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

    if ([viewController isKindOfClass:[self class]]) {
        //write your code here
    } 
}
2 голосов
/ 27 ноября 2010

Несмотря на то, что вы решили свою проблему, в случае, если кто-то придет в будущем, другая проблема могла бы заключаться в том, что вы забыли аргумент animated: to любого метода, то есть формат метода должен выглядеть следующим образом:

- (void) viewWillAppear:(BOOL)animated
0 голосов
/ 05 октября 2013

Я заметил ту же проблему в iOS7. Когда я использую и панель вкладок (2 кнопки A, B) и контроллер навигации.

А имеет два вида. Один с табличным представлением, а второй отображает данные в соответствии с выбором из табличного представления.

B имеет единственный вид.

Кнопка, относящаяся к другому отдельному представлению D, размещенная в обоих представлениях панели вкладок (A и B) и в обоих представлениях A.

Проблема возникает, когда я нажимаю кнопку на вкладке B, viewWillAppear и viewDidLoad не вызывается.

Так что я решил эту проблему с помощью presentModalViewController:animated: и, чтобы вернуться, я использовал dismissModalViewControllerAnimated:, как раз, когда я иду, чтобы просмотреть D из закладки B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...