如何设置subview-viewController的navigationController属性?

时间:2011-07-03 07:31:48

标签: iphone objective-c ios

我有一个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属性可以不是表视图吗? (并且该视图将表视图作为子视图)

感谢您的支持,提前。

2 个答案:

答案 0 :(得分:2)

实际上,概念是将视图控制器推送到导航控制器的导航堆栈。并且 UIViewControllers 只能呈现模态视图控制器,它们无法推送视图控制器。因此,将 pushViewController 消息发送到 self (这是一个 UIViewController )是错误的。您可以使用[self.navigationController pushViewController:anotherViewController];

推送视图控制器

答案 1 :(得分:0)

UITableViewController控制器中使用self.navigationController代替self

[self.navigationController pushViewController:viewController animated:YES];