У меня есть несколько классов UITableViewController, и я просто заметил, что эти методы не называют:
-(void)viewWillAppear:(BOOL)animated;
-(void)viewDidAppear:(BOOL)animated;
Я читал в http://discussions.apple.com/thread.jspa?threadID=1529769&tstart=0, что я должен буду назвать те методы сам при продвижении контроллеров представления, но это странно, так как это работает на что-либо кроме UITableViewController.
Также делает это чем-то вроде проблемы, когда мне нужно было отменить выбор UITableViewCell в UIViewController, который продвинул UITableViewController.
Кто-нибудь решил это, потому что исходный пост правильный - простое использование UITableViewController и отправка табличного представления этого контроллера на navController НЕ запускает эти методы, несмотря на то, что это должно быть. У меня есть серия UITableViewController и табличных представлений, которые выталкиваются и выталкиваются для отображения иерархических данных - ничего особенного, но методы «viewWill / Did / Appear / Disappear» никогда не вызываются. Вызываются только viewDidLoad и viewDidUnload.
В обеих наших настройках должна быть проблема с подключением, но все, что требуется, - это просто вставить представление в navigationController (?) - трудно поверить, что это могло остаться незамеченным как фундаментальная ошибка так долго.
?
Эти два метода вызываются по умолчанию для уведомления об изменениях. UITableViewController является подклассом UIViewController, поэтому поведение будет таким же. Подробнее см. В Руководстве по программированию контроллера представления
. Методы viewWillAppear: и viewDidAppear: дают подклассам возможность выполнять любые дополнительные действия, связанные с внешним видом представления.
Откуда вы знаете, что эти методы не вызываются? Можете ли вы предоставить еще несколько кодов или, по крайней мере, протестировать их с помощью NSLog (), чтобы увидеть, напечатаны ли какие-то сообщения.
Я не могу найти это в документации, но я думаю, что это может быть из-за того, что вы используете UINavigationController.
Как насчет установки свойства делегата UINavigationController и последующей реализации UINavigationControllerDelegate? Он предоставляет два дополнительных метода:
– navigationController:willShowViewController:animated:
– navigationController:didShowViewController:animated:
Например, navigationController:willShowViewController:animated: может выглядеть примерно так:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ([viewController isKindOfClass:[UITableViewController class]]) {
[viewController viewWillAppear:animated];
}
}
В любом случае, это позволит вам добиться желаемого поведения без необходимости взламывать вызовы viewWillAppear: по всему проекту.