Iphone 如何引用superview';导航控制器

Iphone 如何引用superview';导航控制器,iphone,uinavigationcontroller,subview,Iphone,Uinavigationcontroller,Subview,我有一个可重用的UITableViewController子类,称之为“tableVC”。选择表格行会将该详图视图控制器推送到导航堆栈上。tableVC实例只有在其自身被推送时才具有有效的navController。到目前为止还不错 我需要将tableVC的视图嵌入到另一个视图中,该视图的viewController已被推送。由于superview的viewController已被推送,因此它具有有效的navCon。我无法从tableVC中获取导航控制,因为tableVC尚未被推送,因此完全可重

我有一个可重用的UITableViewController子类,称之为“tableVC”。选择表格行会将该详图视图控制器推送到导航堆栈上。tableVC实例只有在其自身被推送时才具有有效的navController。到目前为止还不错

我需要将tableVC的视图嵌入到另一个视图中,该视图的viewController已被推送。由于superview的viewController已被推送,因此它具有有效的navCon。我无法从tableVC中获取导航控制,因为tableVC尚未被推送,因此完全可重用的tableVC无法推送细节。 除了在一个特殊的UINavigationController变量中进行黑客攻击外,是否有一种干净的方法引用该navCon,如果self.navigationController为nil,则访问该黑客攻击?这似乎是一种非常普遍的情况,应该有一个最佳实践。 非常感谢您的任何见解。
-Mike

在UIViewController中嵌入UITableViewController是什么意思?我可以看到UITableView如何嵌入到UIView中(我有这样做的代码)。但是嵌入视图控制器

当我在UIView中有一个UITableView时,我将UIViewController子类化,并让它实现UITableViewDelegate和UITableViewDataSource,如下所示:

@interface MyViewController : UIViewController
        < UITableViewDelegate, UITableViewDataSource >
//...    
@end
@接口MyViewController:UIViewController

//...    
@结束
这允许一个IUViewController同时工作。这会在某种程度上损害您的独立UITableViewController。但是,您可以创建某种委托类来实现UITableViewDelegate和UITableViewDataSource,并将该委托类的实例(作为ivar)引用到UIViewController


只是一个想法…

在UIViewController中嵌入UITableViewController是什么意思?我可以看到UITableView如何嵌入到UIView中(我有这样做的代码)。但是嵌入视图控制器

当我在UIView中有一个UITableView时,我将UIViewController子类化,并让它实现UITableViewDelegate和UITableViewDataSource,如下所示:

@interface MyViewController : UIViewController
        < UITableViewDelegate, UITableViewDataSource >
//...    
@end
@接口MyViewController:UIViewController

//...    
@结束
这允许一个IUViewController同时工作。这会在某种程度上损害您的独立UITableViewController。但是,您可以创建某种委托类来实现UITableViewDelegate和UITableViewDataSource,并将该委托类的实例(作为ivar)引用到UIViewController


只是一个想法…

简单的答案是否定的,没有其他方法可以到达您要的导航控制器

中等答案是,您可以覆盖表视图控制器的navigationController属性以使其可写:

@interface myTableViewController : UITableViewController {
  UINavigationController *navigationController;
}
@property (nonatomic, retain) UINavigationController *navigationController;
这将允许您在将其视图添加为子视图时将其设置为推送VC的导航控制器。当您正常地将它推到导航控制器堆栈上时,它也会像承诺的那样工作

答案很长是苹果不鼓励你这么做。从中:

注意:如果要将单个 筛选到多个区域并管理 每一个单独,使用泛型 控制器对象(自定义对象) 从NSObject(对象)下降,而不是 查看控制器对象以管理每个 屏幕的子部分。然后使用 单个视图控制器对象到 管理通用控制器对象。 视图控制器协调视图 整体屏幕交互,但 根据需要将消息转发给 它管理的通用控制器对象


我遇到了您正在描述的问题,最后首先采取了一种方法:创建一个单独的控制器类,该类继承自NSObject(而不是UIViewController),并实现UITableViewDelegate和UITableViewDataSource来管理表视图。如果你决定走这条路的话,他的帖子中有非常有用的示例代码。当我这么做的时候,很大程度上相当于简单地更改了自定义UITableViewController子类中的继承声明。

简短的回答是否定的,没有其他方法可以获得您所追求的导航控制器

中等答案是,您可以覆盖表视图控制器的navigationController属性以使其可写:

@interface myTableViewController : UITableViewController {
  UINavigationController *navigationController;
}
@property (nonatomic, retain) UINavigationController *navigationController;
这将允许您在将其视图添加为子视图时将其设置为推送VC的导航控制器。当您正常地将它推到导航控制器堆栈上时,它也会像承诺的那样工作

答案很长是苹果不鼓励你这么做。从中:

注意:如果要将单个 筛选到多个区域并管理 每一个单独,使用泛型 控制器对象(自定义对象) 从NSObject(对象)下降,而不是 查看控制器对象以管理每个 屏幕的子部分。然后使用 单个视图控制器对象到 管理通用控制器对象。 视图控制器协调视图 整体屏幕交互,但 根据需要将消息转发给 它管理的通用控制器对象


我遇到了您正在描述的问题,最后首先采取了一种方法:创建一个单独的控制器类,该类继承自NSObject(而不是UIViewController),并实现UITableViewDelegate和UITableViewDataSource来管理表视图。如果你决定走这条路的话,他的帖子中有非常有用的示例代码。当我这样做的时候,它在很大程度上相当于简单地更改了自定义UITableViewController子类中的继承声明。

我没有嵌入UITableView控制器,而是嵌入了它的视图。我没有嵌入UITableView控制器,而是嵌入了它的视图。Matt的代码解决了一个稍微不同的问题