如何在不将控制器添加到视图层次结构并使其可见的情况下从 UIViewController 获取 UIView?

Posted

技术标签:

【中文标题】如何在不将控制器添加到视图层次结构并使其可见的情况下从 UIViewController 获取 UIView?【英文标题】:How to get a UIView from a UIViewController without adding the controller to the view hierarchy and making it visible? 【发布时间】:2011-08-27 05:53:54 【问题描述】:

我想避免以编程方式布局视图。

我只想使用 NIB 文件来做这样的工作。

问题是,我所知道的使 NIB 文件栩栩如生的唯一方法是通过这样的控制器:

ZBarReaderViewController* reader = [[ZBarReaderViewController alloc] init];
ScannerOverlayViewController *sovc =
[[ScannerOverlayViewController alloc] initWithNibName:@"ScannerOverlayView" bundle:nil];
reader.cameraOverlayView = sovc.view;

但这种方法效果不佳,因为单步调试调试器显示视图为 0x0 或 Nil。

现在这可能是因为控制器从未添加到/显示在视图层次结构中,我试图从中获取视图,以便在另一个允许的控制器上将其作为“覆盖视图”回收我来指定它。

关于如何在不以编程方式编写视图的情况下实现这一点的任何想法?

【问题讨论】:

【参考方案1】:

您可以从 XIB 文件加载视图:

// I assume, that there is only one root view in interface file
NSString *nibName = @"CustomView";
NSArray *loadedObjects = [[NSBundle mainBundle] loadNibNamed:nibName owner:nil options:nil];
UIView *view = [loadedObjects lastObject];

【讨论】:

非常好!谢谢你。加载的视图是否返回为自动释放? 是的,如果你想拥有它,你需要保留它。

以上是关于如何在不将控制器添加到视图层次结构并使其可见的情况下从 UIViewController 获取 UIView?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不将实例模型添加到数据库的情况下向实体模型添加FK约束?

如何在不添加目录层次结构的情况下使用 Python 将文件添加到 tarfile?

如何以模态方式将视图添加到不在视图层次结构中的另一个视图 iOS

带有视图的 Drupal 头版

如何推送 ViewController 并使第一个控制器部分可见?

Rails html 视图,定位一个元素并使其仅对一个视图不可见。