以编程方式设置IBInspectable

3
我希望根据获取的互联网信息设置不同的IBInspectable项目。例如,我有绿色、红色和橙色圆形的IBInspectables。如果请求说是绿色,我想将isGreen inspectable设置为Yes,其他设置为No。其他两个也是如此。 您可以在这里看到IBInspectables。我知道我可以使用我放在那里的代码来做到这一点,但是否有一种以编程方式切换它们的方法?
2个回答

6
任何IBInspectable仅仅是一个被编码为在IB中显示的属性。因此,如果您有以下代码:

@IBInspectable var isGreen:Bool? {
    didSet {
        // code to color circle?
    }
}

您可以这样做:
self.isGreen = true

所以,在我的ViewController中,我应该添加@IBInspectable isGreen,然后在viewWillAppear方法中写什么呢? - Dragos Strugar
我应该在哪里确定调用它们中的哪一个,并且如何触发它们? - Dragos Strugar
我误读了你的问题。你可能可以重构一下,因为IBInspectable属性已经对UIColor类型有了了解。[链接]http://nshipster.com/ibinspectable-ibdesignable/展示了一个很好的例子。 - user7014451
是的,谢谢。非常好的资源。解决了我的问题。你必须在didSet {}中键入所有改变UI的代码。 - Dragos Strugar

0

你听起来有点困惑。术语IBInspectable描述了一个视图对象的属性,该属性上有@IBInspectable标签。这告诉Interface Builder你希望能够从Interface Builder内部更改该属性。

除了可以在Interface Builder中进行编辑,IBInspectable属性与其他任何属性没有区别。

如果你有一个名为CircleView的类,其中有一个名为diameter的属性:

class FooView: UIView {
  @IBInspectable var diameter: CGFloat {
    didSet {
      //Code to do something with a change to the diameter property
    }
}

如果你的视图控制器中有一个带有outlet的FooView对象,那么你可以像其他属性一样在代码中更改自定义属性的值。
class MyViewController: UIViewController {

  @IBOulet weak var fooView: FooView!

  @IBAction func buttonTapped(sender: UIButton) {
    fooView.diameter += 5
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接