Как вызвать viewWillAppear при возвращении в иерархию контроллера навигации? - PullRequest
1 голос
/ 22 ноября 2010

Я пробовал различные методы для запуска некоторого кода при возврате к первому уровню UINavigationController, но ни один из перечисленных ниже не работает ...

// HomeViewController.m
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    NSLog(@"trigger 1");
}

- (void)viewWillAppear:(BOOL)animated {
    NSLog(@"trigger 2");
}

-(void) viewDidAppear:(BOOL)animated {
    NSLog(@"trigger 3");
}

Я начинаю думать, что неправильно настроил свое приложение ... это что-то из-за наличия UIViewControllers в UIViewControllers?

Это перо для приложения. Это UITabBarController с контроллером навигации для каждой вкладки, и внутри него первая страница UINavigationController. Является ли эта установка причиной, по которой методы не запускаются?

alt text

Не показан в этом UIView внизу, который связан с представлением владельца файла. И чтобы сделать его более сложным, MainViewController на самом деле является оборотной стороной приложения в стиле Utility.

1 Ответ

0 голосов
/ 22 ноября 2010

Просто чтобы сказать, что я решил это по-другому.Мне нужно было вызвать что-то вроде viewWillAppear, потому что мне нужно было обновить мою первую таблицу представления, когда что-то изменилось в моем втором представлении.

Способ, которым я достиг этого, был в моем методе tableView: commitEditingStyle (вызывается после того, как яудалить что-то), я поставил это в конце ..

[[[[self.navigationController.tabBarController.viewControllers objectAtIndex:0] viewControllers] objectAtIndex:0] reloadTheTable];

reloadTheTable - это метод в моем HomeViewController, который выполняет такие вещи, как массивы обновления и [tableView reloadData] и т. д .;

Это многоскобок.Я уверен, что мой кончик может быть настроен, чтобы сделать это проще.Я думаю, что Каспаров сказал, что он думает, что четыре шага впереди ... и мой предел - четыре скобки.

Я решил это, выполнив такие вещи:

NSString *name = NSStringFromClass ([[self parentViewController] class]);
NSLog(@"%@", name); // outputs UINavigationController

и медленно добавляя кпока я не нашел то, что искал:

name = NSStringFromClass ([[[[self.navigationController.tabBarController.viewControllers objectAtIndex:0] viewControllers] objectAtIndex:0] class]); //UINavigationController
NSLog(@"%@", name); // outputs HomeViewController

Что-то определенно странное в том, как viewWillAppear отменяется, когда вы помещаете представления в представления.

...