我有一个UIViewController,它有另一个UITableViewController作为子视图。
表视图不可见,但在某些时候,用户的操作可以看到它。 (例如,搜索表视图。)
所以,两个新的控制器实际上没有关系,(但是UIViewController有UITableViewController作为成员变量),但只有它的视图有父 - 子视图相关。
在这种情况下,用户单击表视图中的单元格项,我必须将新的视图控制器推送到导航控制器。
但只有父UIViewController在navigationController中,子视图UITableViewController不在。
所以代码
[self pushViewController:viewController animated:YES];
在UITableViewController中失败。
我通过将父UIViewController的navigationController实例作为名为 parentNavigationController 的属性传递给UITableViewController解决了这个问题,并且我调用了
[self.parentNavigationController pushViewController:viewController animated:YES];
代替。
这是解决方案并不是那么糟糕,但我认为它有些困惑,我想知道是否有更多的清算解决方案。
朋友,你如何在这种情况下编程?
我认为两个视图控制器的父子视图关系是混淆的,第一个。如果我在一个viewController中管理两个视图会更好吗?那么,UITableViewController的view属性可以不是表视图吗? (并且该视图将表视图作为子视图)
感谢您的支持,提前。
答案 0 :(得分:2)
实际上,概念是将视图控制器推送到导航控制器的导航堆栈。并且 UIViewControllers 只能呈现模态视图控制器,它们无法推送视图控制器。因此,将 pushViewController 消息发送到 self (这是一个 UIViewController )是错误的。您可以使用[self.navigationController pushViewController:anotherViewController];
答案 1 :(得分:0)
在UITableViewController
控制器中使用self.navigationController
代替self
。
[self.navigationController pushViewController:viewController animated:YES];