Краткий ответ AFAIK: нет, другого способа добраться до нужного вам навигационного контроллера нет.
Средний ответ заключается в том, что вы можете переопределить свойство navigationController контроллера табличного представления, чтобы сделать его доступным для записи:
@interface myTableViewController : UITableViewController {
UINavigationController *navigationController;
}
@property (nonatomic, retain) UINavigationController *navigationController;
Это позволит вам установить его на навигационный контроллер выдвинутого ВК, когда вы добавите его представление в качестве подпредставления. Он также будет работать, как и было обещано, при обычном переносе его в стек контроллера навигации.
Длинный ответ заключается в том, что Apple препятствует тому, что вы делаете. От «О пользовательских контроллерах представления» в Руководстве по программированию контроллера представления :
Примечание: если вы хотите разделить один
экран в нескольких областях и управлять
каждый в отдельности, используйте общий
объекты контроллера (пользовательские объекты
нисходящий от NSObject) вместо
просматривать объекты контроллера для управления каждым
подраздел экрана. Тогда используйте
один объект контроллера представления к
управлять общими объектами контроллера.
Контроллер вида координирует
общее взаимодействие экрана, но
пересылает сообщения по мере необходимости на
общие объекты контроллера, которыми он управляет.
Я столкнулся с проблемой, которую вы описываете, и в итоге первым выбрал подход , предложенный Мэттом Галлахером по «Какао с любовью» : создайте отдельный класс контроллера, который наследуется от NSObject (вместо UIViewController) и реализует UITableViewDelegate и UITableViewDataSource для управления табличным представлением. У него есть пример кода с его постом, который очень полезен, если вы решите пойти по этому пути. Когда я делал это, это в основном сводилось к простому изменению объявления наследования в моем пользовательском подклассе UITableViewController.