ナビゲーション コントローラーは、ビュー全体を管理するビュー コントローラーをプッシュおよびポップするように設定されています。同じスーパービュー内にビューが表示される複数のビュー コントローラーを簡単にサポートする API はありません。
tableview サブビューの 1 つで次のビューをプッシュしようとする代わりに、"News View" コントローラーからナビゲーションを管理する必要があります。さらに良いことに、「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;
}
次に、いずれかの CustomClasses の didSelectRow メソッドで:
nextViewController=// intialize or get reference to next view controller
[self.nav pushViewController:nextViewController animated:YES];
nav は、nextViewController を NewsViewController の上にプッシュし、新しい画面を表示します。完了すると、それ自体がポップし、NewsViewController が元の状態で再表示されます。
この方法では、いつでも 1 つの View Controller のみをアクティブにできるため、API はスムーズに動作しますが、各テーブルの動作は独自のクラスにカプセル化されます。
誰もが幸せです。