IOS. Контроллер навигации. Повторное использование ViewControllers - PullRequest
1 голос
/ 21 декабря 2011

Вот моя проблема. У меня есть приложение на основе представления. Я добавил NavigationController к AppDelegate следующим образом.

UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:_viewController];    
navigationController = [nvc retain];
[nvc retain];     
[self.window addSubview:navigationController.view];

Этот код я получил из интернета. Я не знаю, правильно ли это.

Во всех viewControllers я делаю следующее, чтобы выдвинуть новое представление.

UIViewController *newViewController = [[NewViewController alloc] init];
[self.navigationController pushViewController:newViewController animated:TRUE];
  1. Я не знаю, почему self.navigationController не возвращает ноль в выдвинутых представлениях. Это как-то использует навигационный контроллер AppDelegate?

  2. Если я хочу повторно использовать некоторые контроллеры представления. Я имею в виду не выделять init каждый раз, когда я хочу вызвать контроллер представления. Как я могу это сделать? Сохранить ссылку в AppDelegate? Любое другое решение?

  3. У меня сложная навигация. то есть A, B, C являются контроллерами представления. A вызывает B. B вызывает C. C вызывает A. Если я продолжаю звонить, я каждый раз создаю новый контроллер представления Как я могу повторно использовать эти контроллеры представления (или вытолкнуть и освободить представление из стека при вызове нового)?

Спасибо.

1 Ответ

0 голосов
/ 21 декабря 2011

1) navigationController является собственностью UIViewController.Если контроллер представления является частью иерархии контроллера навигации, он будет установлен.

2) Вам придется управлять этим самостоятельно.Хранение ссылки в объекте, который выдвигает этот контроллер представления, будет обычным способом достижения этого.Поэтому, если A нажимает B, то A сохраняет ссылку на B и т. Д.

3) Нет способа заставить UINavigationController сделать это для вас.Из того, что вы пытаетесь сделать, я предполагаю, что вы пришли из Android фона?У Android есть конкретные способы сделать это, но в iOS вам придется кодировать это самостоятельно.Вы можете сделать это, взглянув на UINavigationControllerDelegate и метод navigationController:didShowViewController:animated:.Вы могли видеть, когда контроллер представления выдвигается и если он уже находится в стеке, то обновите стек навигации (то есть свойство viewControllers UINavigationController), чтобы удалить его с того места, где он был.Но это может запутать пользователя.

...