【问题标题】:Live Render IBOutlet Connected Subviews Via IBInspectable Properties通过 IBInspectable 属性实时渲染 IBOutlet 连接的子视图
【发布时间】:2014-12-08 04:08:59
【问题描述】:

我在 iOS 8 中第一次使用故事板,到目前为止,我一直喜欢故事板上事物的实时渲染方面。但是,我似乎在让我的视图在情节提要上正确呈现时遇到了障碍。

我有一个容器 UIView,其中包含与情节提要上的 UILabel 的连接,我正在尝试根据标签父容器视图上的 IBInspectable 属性设置标签的文本。

@IBDesignable class ContainerView : UIView {
    @IBOutlet weak var : titleLabel : UILabel!

    @IBInspectable var title : String = "" {
        didSet {
            titleLabel?.text = title
        }
    }

    /* Init functions */

    prepareForInterfaceBuilder() {
        self.titleLabel?.text = title
    }
}

如果我在情节提要中设置属性,它会在程序执行时按预期呈现,但无法按预期在情节提要中呈现。我检查了我的连接,一切似乎都已正确连接。

我的问题是:是否可以通过 IBInspectable 属性影响 IBOutlet 连接视图的内容并让它们在情节提要上实时呈现,如果是这样,我错过了什么或做错了什么?

【问题讨论】:

  • 我知道调用 prepareForInterfaceBuilder 时所有的出口都为零。我确信这是不传播实时渲染的一个重要原因,但我不确定是否还有其他地方可以声明我想要的行为以使其显示在 Interface Builder 中。跨度>

标签: ios swift interface-builder ios8


【解决方案1】:

很遗憾,您在自定义视图的界面构建器中看不到IBOutlet 对象,这些对象标记为IBDesignable。如果您想在界面生成器中查看您的插座,则必须使用常规变量而不是 IBOutlet,并且您必须以编程方式创建对象。

另外请注意,如果您需要从界面生成器中为您的对象更改某些内容,您必须将您的属性定义为IBInspectable。目前以下变量类型对IBInspectable有效:

BoolCGFloatCGPointCGRectCGSizeNSIntegerNSStringUIColorUIImage

我希望这个答案对你来说足够清楚。

编辑:我发现以下文章描述了如何做你需要的事情:

http://justabeech.com/2014/07/27/xcode-6-live-rendering-from-nib/

第二次编辑:我尝试了这篇文章,它有效。现在我可以在界面生成器上看到我的插座

【讨论】:

  • 是的,这就是我的想法,但我想得到确认。我试图将我所有的 UI 设计保留在情节提要中,但我想这在这个时候是不可能的。感谢您的回复。
  • 是否可以在更改可检查文件时使用 didSet 或 sth 来更新 storyboard 中的 customView?像这样:@IBInspectable var title: String? { didSet { lblTitle.text = title } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
相关资源
最近更新 更多