【问题标题】:How do I associate a nib (.xib) file with a UIView?如何将 nib (.xib) 文件与 UIView 关联?
【发布时间】:2013-09-12 01:54:31
【问题描述】:

我有一个 UIView 的子类“s”。我想在 s 上放一些按钮和标签。如何将我的 UIView 子类与 nib 文件关联?

【问题讨论】:

    标签: iphone


    【解决方案1】:
    1. 在界面生成器中,创建一个新的 带有视图模板的 xib。
      • 点击查看列表中的 xib 中的对象(您还应该 请参阅“文件的所有者”和“首先 响应者”)。
      • 按 Cmd-4 打开身份窗格 检查员的。
      • 在 “类名”字段并推送返回。

    您应该可以拖动按钮。要从代码中获取笔尖,请使用-[NSBundle loadNibNamed:owner:options:]。您的视图应该是返回数组中的第一个对象。

    【讨论】:

    • 我正在尝试做同样的事情 - 你知道我应该为 (a) 父 UIControllerView 和 (b) 自定义 UIView 本身使用什么类名吗?我已经在我的代码中注意到我在两者中都有我的自定义 UIView 类名,但这给了我对我的自定义 UIView init 方法的递归调用。那就是我(a)在使用我的自定义视图的父 UIControllerView 中,在 IB 中因为它是 XIB 我使用 UIView,我已将类名设置为“clockview”,但随后(b)在我的实际时钟视图自定义 UIView (不是 UIControllerView)XIB 文件我做了同样的事情并将类名设置为“clockview”。
    • @Colin 我们真的需要将File's Owner 设置为自定义 UIView 类吗?我看不出将它设置为UIViewmyCustomView 有什么区别。在这种情况下File's Owner 的目的是什么?
    • 我希望能够在多个地方使用带有笔尖的 UIView。有没有办法不用每次都连接 IBOutlets?
    • 在 XCode 4.5 中,我需要清理并关闭 XCode 以使 UIView 类显示在您需要链接的属性所在的“自定义类”列表中。
    • 任何人都可以发布如何正确加载和显示该 UIView 吗?谢谢
    【解决方案2】:

    在我的例子中,我不希望我的视图控制器从我的视图的 .xib 中获得任何关于 IBOutlets 的知识。我希望我的视图子类拥有 IBOutlets。不幸的是 UIView 没有initWithNibName: 方法,所以我只是创建了自己的类别。

    这就是我所做的:

    • 在 IB 中,单击您的主 UIView,然后在 Identity Inspector 中,将类设置为您的子类
    • 在 IB 中,单击 File's Owner,然后在 Identity Inspector 中,将类设置为您的子类
    • 使用您的新类别方法initWithNibName: 实例化您的视图。

    这是我创建的类别:

    - (instancetype)initWithNibName:(NSString *)nibName
    {
        NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil];
        if (arrayOfViews.count < 1) {
            return nil;
        }
    
        self = arrayOfViews[0];
    
        return self;
    }
    

    灵感来自this post

    请注意,到目前为止,框架会自动调整,因此与帖子中的代码不同,我还没有明确设置框架。 此外,与帖子的代码不同,我需要设置 owner:self 以便正确连接 IBOutlets。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 2018-02-15
      相关资源
      最近更新 更多