【问题标题】:What can we do so that users of our custom UIView can customize that UIView in XIB?我们可以做些什么来让我们自定义 UIView 的用户可以在 XIB 中自定义那个 UIView?
【发布时间】:2012-10-12 02:12:57
【问题描述】:

自定义UIView最大的问题是我们在XIB中看到的只是一个白色的矩形。

我们根本无法自定义某些属性。例如,如果我们的自定义 subView 有一个标签,那么能够直接在 XIB 中为该标签设置文本就很好了。

类似于 UIButton 的功能。

这真的可行吗?

XIB设计是否只是捷径,真正的代码在代码中?

【问题讨论】:

    标签: objective-c xcode uiview custom-controls xib


    【解决方案1】:

    不幸的是,没有真正的方法可以在 Interface Builder“属性检查器”面板(您捕获的那个)中添加条目以允许您像对内置 Cocoa 类所做的那样自定义值。


    (确切地说,一些博客解释了一些将旧的 Xcode3 插件(在 Xcode3 中能够做到这一点)转换为 Xcode4 插件的方法,但这没有正式记录,而且设置需求非常复杂一个专门的 Xcode 项目,只是为了创建您的自定义视图,声明其 IB 调色板,编写一些关联代码并将其嵌入到 xcode 插件中......)


    但是,您仍然有一种可能性,即使不是很方便,也可以直接在 Interface Builder 中自定义 XIB 中任何对象的任何属性,而不是通过代码来实现。

    只需进入“Identity Inspector”(属性检查器之前的选项卡,Cmd-Alt-3)并使用“用户定义的运行时属性”表来填写名称/密钥路径您要更改的属性并指明它们的值。

    然而,在实践中,我很少看到它在我使用的 XIB 文件中使用,因为它不如专用的“属性检查器”调色板好,而且您必须键入 准确 名称表中的属性,以便您可以影响它的值:没有为您构建的可修改属性列表,面板中有漂亮的文本字段和复选框来帮助您……但它仍然像魅力一样工作!


    请随时向 Apple 发送请求(使用他们的反馈工具)以请求此功能,因为您不是第一个希望实现此功能的人,也不会是最后一个请求此功能的人,所以也许希望 Apple 会收到足够多的请求,并且他们会实施它……

    【讨论】:

    • 谢谢。所以我将 linkColor 定义为用户定义的运行时属性。那我什么时候可以访问这个所谓的链接颜色?所以 linkColor 需要是 UIView 的一个属性,并且在 [super initWithDecoder:] 之后可用?
    • 是的,就是这样。在我的捕获中,您可以看到在我的 XIB 中选择的对象属于 OHAttributedLabel 类(custom class of mine),它是 UILabel 的子类,我在其中添加了一些属性,包括 @property(retain) UIColor* linkColor。在“用户定义的运行时属性”中配置linkColor 属性值(如在捕获中一样)使得该值在XIB 实例化对象时设置,因此该值在它为@987654327 时设置@方法被调用。
    • 是的,这个解决方案很好,唯一的缺点是您需要输入属性的确切名称并在该表中的 IB 中输入自己,并确保它与您的代码中的匹配,但除此之外它非常有用。请注意,您也可以使用 keyPath 而不仅仅是其中的属性名称(如果您不知道 keyPaths 是什么,请在 Apple 文档中搜索“KVC”并阅读功能强大的“Key-Value-Coding Programming Guide” )
    • 此处使用 keyPath 的简单示例:如果您的自定义视图包含例如一个@property UILabel* titleLabel,您可以在“用户定义的运行时属性”表的“keyPath”列中输入titleLabel.textColortitleLabel.numberOfLines 甚至titleLabel.layer.borderWidthtitleLabel.layer.borderColor...,并为每一个指定相应的值!
    【解决方案2】:

    是的,这是可能的。

    首先,在您的自定义视图中添加以下属性(假设您使用 ARC 功能):

    @property(nonatomic, strong) IBOutlet UILabel myLabel;
    

    现在,在您的 xib 中,确保主视图是您的自定义视图。 在视图中所需的位置添加标签。 单击自定义视图,然后使用连接检查器将标签链接到 myLabel。

    【讨论】:

    • 这是一种方法。但我希望标签是原始标签。
    【解决方案3】:

    情节提要/笔尖显示了代码运行之前界面的外观。如果你想在故事板中看到它,你必须在故事板中构建它。如果您有自定义对象,故事板中有一个基本对象可用作占位符,但它不会显示代码中加载的内容。

    【讨论】:

      猜你喜欢
      • 2016-11-14
      • 2015-04-17
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-26
      相关资源
      最近更新 更多