ViewDidAppear не вызывается в приложении на основе панели вкладок - PullRequest
1 голос
/ 13 сентября 2011

У меня проблема.Я работаю над приложением, которое основано на панели вкладок.В этом приложении мы вызываем [self.view addSubview:newVC.view], когда мы хотим перейти к новому виду.newVC - это контроллер представления нового представления, которое мы хотим отобразить.Также мы используем [self.view removeFromSuperview], когда хотим вернуться к предыдущему виду.

То есть, другими словами, нет навигационного контроллера.Теперь проблема в том, что я хочу обновить предыдущее представление.Так как мы используем [self.view removeFromSuperview], viewDidAppear предыдущего представления не вызывается, и поэтому у нас нет способа обновить это представление.

Я знаю, что у подхода, который мы использовали, есть недостаток, но так как он большоймасштабируйте приложение и изменяйте его, чтобы внедрить навигационный контроллер с большим количеством времени, поэтому мне нужно, чтобы вы помогли мне найти решение этой проблемы.Как я могу вызвать viewDidLoad или viewDidAppear или предыдущее представление о вызове [self.view removeFromSuperview] из его подпредставления?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2011

Да, как сказала Сара, вы должны хранить ссылку на предыдущий контроллер в «стеке». А при «извлечении» контроллера из стека вызывайте соответствующий метод на предыдущем контроллере. Конечно, вы не должны вызывать viewDidLoad (он не вызывается, когда вы извлекаете контроллер из стека навигации реального UINavigationController). Вы можете вызвать viewWillAppear или viewDidAppear, но лучше использовать свой собственный метод, например viewRevealed (вы также можете вызывать его из viewWillAppear или viewDidAppear). Полезно сделать Базовый класс, где реализуют всю эту функциональность и выводят все ваши контроллеры из базового класса. Это может выглядеть так:

- (void) pushViewController:(BaseViewController *)baseController{
  [self.view addSubview:baseController.view];
  baseController.parentController = self;
}
- (void) pop{
  [self.view removeFromSuperview];
  [self.parentController viewRevealed];
}
0 голосов
/ 13 сентября 2011

viewDidLoad вызов метода только тогда, когда вы переходите в контроллер через pushViewController метод.Если вы вызовете removeFromSupreView, он вызовет метод viewWillAppear.Здесь, если вы хотите перейти от одного представления к другому представлению на панели вкладок, вы должны использовать UINavigationController в Mainwindow.xib и подключить его viewController с делегатом приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...