Контроллер навигации настроен так, чтобы выдвигать и выдвигать контроллер вида, который управляет всем видом. На самом деле ничто в API не поддерживает несколько контроллеров представления, чьи представления отображаются в одном и том же суперпредставлении.
Вместо того, чтобы пытаться выдвинуть следующий вид в одном из подпредставлений вида таблицы, вы должны управлять навигацией из контроллера «Просмотр новостей». Более того, у вас должен быть только контроллер «News View» и отдельные классы, которые реализуют делегат и источники данных каждой таблицы (они не обязательно должны быть в контроллере представления, это обычно просто удобно).
Примерно так:
@interface NewsViewController {
CustomClass1 *newsTableDelegateAndDataSource;
CustomClass2 *categoryTableDelegateAndDataSource;
}
@interface CustomClass1 {
UINavigationController *nav;
}
в NewsViewController.m
- (void) viewWillAppear{
self.newsTableDelegateAndDataSource.nav= // reference to the navigation controller;
self.categoryTableDelegateAndDataSource.nav = // reference to the navigation controller;
}
Затем в методах didSelectRow одного из CustomClasses:
nextViewController=// intialize or get reference to next view controller
[self.nav pushViewController:nextViewController animated:YES];
Навигатор выдвинет nextViewController поверх NewsViewController и отобразит новый экран. Когда это будет сделано, он выскочит сам, и NewsViewController снова появится в том состоянии, в котором вы его оставили.
Таким образом, в любой момент времени у вас активен только один контроллер представления, поэтому API работает плавно, но вы инкапсулируете поведение каждой таблицы в своем собственном классе.
Все счастливы.