在 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

在 Xcode 中创建按钮

将 SKScene 添加到 UIViewController?

模态视图是否有可能不能在整个屏幕上填充?