viewWillAppear, не названный в UITableViewController?

У меня есть несколько классов UITableViewController, и я просто заметил, что эти методы не называют:

-(void)viewWillAppear:(BOOL)animated;
-(void)viewDidAppear:(BOOL)animated;

Я читал в http://discussions.apple.com/thread.jspa?threadID=1529769&tstart=0, что я должен буду назвать те методы сам при продвижении контроллеров представления, но это странно, так как это работает на что-либо кроме UITableViewController.

Также делает это чем-то вроде проблемы, когда мне нужно было отменить выбор UITableViewCell в UIViewController, который продвинул UITableViewController.

5
задан runmad 10 March 2010 в 15:21
поделиться

3 ответа

Кто-нибудь решил это, потому что исходный пост правильный - простое использование UITableViewController и отправка табличного представления этого контроллера на navController НЕ запускает эти методы, несмотря на то, что это должно быть. У меня есть серия UITableViewController и табличных представлений, которые выталкиваются и выталкиваются для отображения иерархических данных - ничего особенного, но методы «viewWill / Did / Appear / Disappear» никогда не вызываются. Вызываются только viewDidLoad и viewDidUnload.

В обеих наших настройках должна быть проблема с подключением, но все, что требуется, - это просто вставить представление в navigationController (?) - трудно поверить, что это могло остаться незамеченным как фундаментальная ошибка так долго.

?

6
ответ дан 18 December 2019 в 11:55
поделиться

Эти два метода вызываются по умолчанию для уведомления об изменениях. UITableViewController является подклассом UIViewController, поэтому поведение будет таким же. Подробнее см. В Руководстве по программированию контроллера представления

. Методы viewWillAppear: и viewDidAppear: дают подклассам возможность выполнять любые дополнительные действия, связанные с внешним видом представления.

Откуда вы знаете, что эти методы не вызываются? Можете ли вы предоставить еще несколько кодов или, по крайней мере, протестировать их с помощью NSLog (), чтобы увидеть, напечатаны ли какие-то сообщения.

0
ответ дан 18 December 2019 в 11:55
поделиться

Я не могу найти это в документации, но я думаю, что это может быть из-за того, что вы используете 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: по всему проекту.

9
ответ дан 18 December 2019 в 11:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: