Выясните, где я нахожусь в иерархии uinavigationcontroller, или если представление было выдвинуто? - PullRequest
0 голосов
/ 26 мая 2010

У меня есть представление, которое иногда отображается в виде push-представления uinavigationcontroller, а иногда просто как начальное представление элемента панели вкладок.

На интерфейсе есть кнопка «Сохранить», которую я хочу, чтобы вид возвращался к предыдущему виду, когда он был нажат на экран, и ничего не делал, когда он отображался как часть выбранного экрана панели вкладок.

В псевдокоде, я думаю, что я хочу сделать:

if view-has-been-pushed, then pop back, else do nothing

Как я могу узнать, был ли просмотр перемещен?

Ответы [ 3 ]

5 голосов
/ 26 мая 2010

Согласно документации

 NSArray* views = [myNavigationController viewControllers];
 if (self == [views objectAtIndex:0])
 {
    // I am the root view
 }

но, как сказал jasarien, popViewControllerAnimated ничего не делает, если представление уже является корнем

1 голос
/ 26 мая 2010

Ваша логика «если view-was-push-up, затем pop-up, иначе ничего не делать» легко реализуется с помощью чего-то вроде:

if (self.navigationController != nil) {
    // We are part of a navigation controller, so pop
}

Вы, вероятно, хотите удалить кнопку Готово, если вы не находитесь в контроллере навигации? Вы можете сделать ту же проверку в viewDidLoad и показать или скрыть там кнопку Готово.

1 голос
/ 26 мая 2010

Вы можете получить свойство view controllers из контроллера навигации и сравнить с первым контроллером в массиве. Если сравнение возвращает true, то это корневой контроллер представления, иначе он был выдвинут.

Однако, если контроллер представления является корневым контроллером представления, вызов pop не должен ничего делать, поэтому вам не нужна дополнительная логика.

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