繁体   English   中英

如何引用superview的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM