【问题标题】:Design view in Interface Builder to load lazily in UIViewControllerInterface Builder 中的设计视图在 UIViewController 中延迟加载
【发布时间】:2009-11-13 00:18:04
【问题描述】:

我设法让自己感到困惑...我有一个相当复杂的视图控制器,其中大部分都是以编程方式开发的。我想在某个时候在视图控制器顶部弹出一个“对话框”,并且我想在 Interface Builder 中“设计”该视图,因为它相当简单(背景 UIImageView、一些 UILabel 和一个 UIButton)。

我已经创建了 .xib,现在正在使用 IBOutlets 等子类化 UIView。我现在正在尝试将其连接起来并意识到我可能需要添加一个 initWithNibName: 方法以便正确实例化......然后我意识到我真的只是在制作另一个 UIViewController 我不认为我们应该在其他 UIViewController 视图中拥有 UIViewController 视图?!?

所以现在我正在重新考虑如何“正确地”解决这个问题。如何最好地使用 IB 设计一个简单的 1/4 屏幕视图,该视图将在主视图上弹出?

【问题讨论】:

    标签: iphone cocoa-touch uiview uiviewcontroller


    【解决方案1】:

    调用+[NSBundle loadNibNamed:owner:] 加载包含您的视图的NIB 文件。如果您将视图控制器(即self)指定为所有者,那么您在 NIB 文件中与文件所有者建立的任何连接都将连接到视图控制器。因此,您可以在视图控制器中和调用之后为您的自定义视图声明一个出口

    [NSBundle loadNibNamed:@"MyView" owner:self];
    

    出口变量将指向视图对象。或者,您可以使用 -[NSBundle loadNibNamed:owner:options:],它返回 NIB 中顶级对象的数组。

    【讨论】:

    • 好的。尝试使用 [[NSBundle mainBundle] loadNibNamed:@"DialogView" owner:self options:nil]; 但收到“此类不符合键 nameLabel 的键值编码”的错误。 nameLabel 是我在 IB 中连接的 IBOutlet UILabel 的名称,用于测试它...
    • 所以它试图将这些项目与我正在调用 loadNibNamed:owner:options: 的 ViewController 中的属性连接起来。但是这些属性不在 VC 中,它们在 DialogView 中,DialogView 是 UIView 的子类。我的 VC 有一个 dialogView 的属性。我想我希望这个 loadNibNamed 将事物连接到我的视图控制器的关键路径?我觉得我越来越糊涂了!?!
    • 错误信息提示您没有在IB中正确设置要连接nameLabel的对象的类。您是否将 IB 中 DialogView.xib 的文件所有者设置为视图控制器的类?是IB中自定义视图DialogView的类吗?
    • 是的!就是这样! IB 是一个非常强大的东西,但是当我有一段时间不使用它时,它会绊倒我......非常感谢!
    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2015-01-28
    • 2012-12-05
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    相关资源
    最近更新 更多