Вложенный UIViewController необходимо отправить в корневой UINavigationController - PullRequest
3 голосов
/ 23 ноября 2010

У меня есть приложение с UINavigationController, которое содержит корневой подкласс UIViewController (PagingViewController), который управляет и выступает в качестве делегата для горизонтально подкачки UIScrollView. На каждой странице этого UIScrollView есть вертикально прокручиваемый UITableView, каждый из которых управляется своим собственным подклассом UIViewController (PageViewController). Это выглядит примерно так ...

UINavigationController
  PagingViewController (root VC of navigation controller)
    PageViewController (instance 1)
    PageViewController (instance 2)
    PageViewController (instance 3)

  HowToPushThisViewController (this is what I'd like to push onto the current root, PagingViewController, from one of its sub view controllers)

Что я хотел бы сделать, так это в didSelectRowAtIndexPath: метод PageViewController (делегат UITableView), вставить новый UIViewController в UINavigationController (поверх PagingViewController).

Проблема в том, что свойство navigationController для PageViewController равно nil, поэтому я не могу его туда вставить. Я предполагаю, что это ноль, потому что это не ПРЯМО в стеке UINavigationController, но содержит в PagingViewController, который равен в стеке. Я попытался установить свойство navigationController для каждого PageViewController перед добавлением его в PagingScrollView, но, похоже, оно доступно только для чтения (как сам UINavigationController устанавливает?).

Мне кажется, что вложенные UIViewControllers - это звуковая архитектура (каждый из них необходим для управления и выполнения функций делегата для своих представлений), и разумно хотеть использовать навигацию с субконтроллера, поэтому я не уверен, что это лучший метод для доступа и нажатия от вложенного контроллера. Надеюсь, есть что-то простое, что я пропускаю, чтобы получить доступ к корневому контроллеру навигации и нажать на него.

1 Ответ

2 голосов
/ 23 ноября 2010

Логично было бы установить свойство parentViewController контроллера просмотра страниц, но, увы, оно также доступно только для чтения.Apple не поддерживает пользовательские иерархии контроллеров представления (кроме поддерживаемых иерархий с панелью вкладок, контроллерами навигации и разделенным представлением).

В вашем случае я бы определил пользовательское свойство parentVC для класса PageViewControllerчто PagingViewController устанавливает для себя, когда оно создает свои дочерние элементы.Затем PageViewController s может добраться до контроллера Nav через

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