[英]How to get a reference to the view at the top of the NavigationController
[英]How to reference superview's navigationController
我有一个可重用的UITableViewController子类,称之为“tableVC”。 选择表格行会将该详细视图控制器推送到导航堆栈。 tableVC实例在被推送时只有一个有效的navController。 到现在为止还挺好。
我需要将tableVC的视图嵌入到另一个已推送viewController的视图中。 由于superview的viewController已被推送,因此它具有有效的navCon。 我无法从tableVC获得navCon,因为tableVC还没有被推送,所以否则完全可重用的tableVC无法推送细节。 是否有一种干净的方式来引用navCon,除了黑客入侵一个特殊的UINavigationController变量,如果self.navigationController是nil,那么访问hack? 似乎是一个足够普遍的情况,应该有一个最好的做法。 任何见解都非常感谢。 -麦克风
简答 AFAIK不是,没有其他方法可以获得你想要的导航控制器。
中等答案是您可以覆盖表视图控制器的navigationController属性以使其可写:
@interface myTableViewController : UITableViewController {
UINavigationController *navigationController;
}
@property (nonatomic, retain) UINavigationController *navigationController;
当您将其视图添加为子视图时,这将允许您将其设置为推送的VC的导航控制器。 当你将它正常推送到导航控制器堆栈时,它仍然可以像承诺的那样工作。
答案很长 ,苹果不鼓励你做什么。 从View Controller编程指南中的“关于自定义视图控制器” :
注意:如果要将单个屏幕划分为多个区域并分别管理每个区域,请使用通用控制器对象(从NSObject降序的自定义对象)而不是视图控制器对象来管理屏幕的每个子区域。 然后使用单个视图控制器对象来管理通用控制器对象。 视图控制器协调整个屏幕交互,但根据需要将消息转发给它管理的通用控制器对象。
我遇到了你正在描述的问题,最后采用了Matt Gallagher首先对Cocoa with Love建议的方法:创建一个独立的控制器类,它继承自NSObject(而不是UIViewController)并实现UITableViewDelegate和UITableViewDataSource来管理表视图。 他的帖子中有示例代码,如果您决定沿着这条路走下去,这非常有用。 当我这样做时,它很大程度上只是改变我的自定义UITableViewController子类中的继承声明。
在UIViewController中嵌入UITableViewController是什么意思? 我可以看到如何在UIView中嵌入UITableView(我有代码可以做到这一点)。 但嵌入视图控制器......
当我在UIView中有一个UITableView时,我将UIViewController子类化并让它实现UITableViewDelegate和UITableViewDataSource,如下所示:
@interface MyViewController : UIViewController
< UITableViewDelegate, UITableViewDataSource >
//...
@end
这允许一个IUViewController工作双重任务。 这会在某种程度上损害您自包含的UITableViewController。 但是你可以创建一些实现UITableViewDelegate和UITableViewDataSource的委托类,并为你的UIViewController提供一个引用(如ivar)的实例。
只是一个想法......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.