在 UIViewController 中创建整个 UIView
Posted
技术标签:
【中文标题】在 UIViewController 中创建整个 UIView【英文标题】:Create entire UIView within UIViewController 【发布时间】:2012-05-22 19:17:43 【问题描述】:我有一个 UIViewController (controller1),它在 UIView 上显示一些 UIbuttons。当单击其中一个按钮时,我想实例化第二个 UIViewController(controller2,它是一个完全不同的控制器类),然后它将以编程方式创建一些 UIViews 并将它们添加到由 controller1 管理的 UIViews 之一。
所以,在控制器 1 中,我想要以下代码:
- (void) someButtonPressed: (id)sender
ViewController2* controller2 = [ [ ViewController2 alloc ] initWithNibName:nil bundle:nil ];
然后我想以编程方式在 controller2 中创建额外的 UIView。理想情况下,我不会在 controller1 中再添加任何代码行(以添加视图等)。我真的很想创建所有视图并将它们从 controller2 代码中添加到现有视图中。
我可以这样做吗?怎么做?我试过简单地将以下代码放在控制器 2 中:
- (void)loadView
NSLog(@"HPSViewEditorViewController loadView");
但它没有被调用。
我想将控制器 2 的整个 UIView 层次结构封装在控制器 2 代码中,并且不想将控制器 1 与控制器 2 实例化以外的任何东西“混淆”。
谢谢。
【问题讨论】:
【参考方案1】:我会尝试类似的东西
[viewController1 presentModalViewController:viewController2 animated:YES];
这可以解决问题...
【讨论】:
太棒了,很享受。也不需要 loadView 。非常感谢。 Anselm - 小问题;当显示第二个控制器的视图时,整个屏幕变黑。我希望以前视图的内容“显示”属于 controller2 的视图。知道这是否可能吗? 我不是 100% 确定,但我会尝试给背景 UIColor clearcolor... :-)【参考方案2】:来自UIViewController Class Reference:
视图控制器在其视图属性被请求但当前为 nil 时调用此方法。此方法加载或创建视图并将其分配给视图属性。
-loadView 在 controller2.view 被引用之前不会被调用。
【讨论】:
那么,有什么方法可以在 controller2 中引用它吗?以上是关于在 UIViewController 中创建整个 UIView的主要内容,如果未能解决你的问题,请参考以下文章
重构大方法以在 UIViewController 中创建自定义 UIView
从另一个 UIViewController 的 .xib 文件在 ViewController.h 中创建 IBOutlets
Xcode 6.3 错误 - 无法在情节提要中创建 IBOutlet 引用或使用自定义 UIViewController