Как воссоздать стек UIViewController? - PullRequest
0 голосов
/ 08 марта 2010

Я пишу функцию загрузки для моего текущего приложения для iPhone.

Практически я хочу вернуть пользователя туда, где он остановился. Для этого я хочу воссоздать все ранее появившиеся UIViewController.

Моя проблема в том, что UIViewController s не появится, если я просто позвоню [[self navigationController] pushViewController:newController animated:YES];.

Тот же код отлично работает, когда вызывается как обработчик события, как после нажатия кнопки. Но если я сделаю то же самое без четного (например, в viewDidLoad), метод loadView нового контроллера представления не будет вызван.

Мой действительный код (с некоторыми псевдоэлементами):

- (void)viewDidLoad {
    [super viewDidLoad];
    if (loading)
        [self onSomeEvent];
}

- (void)onSomeEvent {
    UIViewController *newController = //init....;
    [[self navigationController] pushViewController:newController animated:YES];
    [newController release];
}

Полагаю, viewDidLoad - это не то место, где можно сделать такой вызов, но что тогда?

1 Ответ

0 голосов
/ 09 марта 2010

Я не уверен, что распространение функции «нагрузки» на все контроллеры - лучший способ добиться этого.

Я бы предпочел поместить его в init вашего приложения, в часть applicationDidFinishLauching. Тогда у вас есть централизованное место, где вы восстанавливаете предыдущее состояние (проще обрабатывать ИМХО).

Предположим, вы хотите реализовать более продвинутую функцию восстановления, такую ​​как:

  • отображение всплывающего UIView с индикатором активности, чтобы указать пользователю, что вы восстанавливаете предыдущее состояние
  • восстановить стек ваших контроллеров в контроллере навигации
  • удалить всплеск

проще иметь весь этот код в приложении DidFinishLauching: все это управляется в одной точке.

Более того, восстанавливая старое состояние на вашем контроллере навигации, вы можете избежать использования переходов и использовать animated:NO вместо YES при нажатии на ваши контроллеры. С вашей точки зрения вам будет проще справиться с этим, и время восстановления может сократиться, если вы удалите время, необходимое для выполнения переходов.

...