导航控制器设置为推送和弹出管理整个视图的视图控制器。API 中确实没有任何东西可以轻松支持多个视图控制器,它们的视图显示在同一个超级视图中。
您应该从“新闻视图”控制器管理导航,而不是尝试在其中一个 tableview 子视图上推送下一个视图。更好的是,您应该只有“新闻视图”控制器,并有单独的类来实现每个表的委托和数据源(它们不必在视图控制器中,这通常很方便。)
像这样的东西:
@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];
导航会将 nextViewController 推送到 NewsViewController 之上并显示新屏幕。完成后,它会自行弹出,并且 NewsViewController 会重新出现在您离开时的状态。
这样,您在任何时候都只有一个视图控制器处于活动状态,因此 API 工作顺利,但您将每个表的行为封装在其自己的类中。
每个人都很高兴。