iOS版。 Interface Builder @IBInspectable崩溃

时间:2015-02-17 10:22:23

标签: ios swift interface-builder ibdesignable ibinspectable

我正在尝试这个IBDesignable。但一如既往,它不起作用。

我的控制器代码:

@IBDesignable
class MainMenuViewController: UIViewController {
    @IBOutlet weak var languagesButton: UIView!
    @IBOutlet weak var keyboardSettingsButton: UIView!
    @IBOutlet weak var aboutButton: UIView!
    @IBOutlet weak var helpButton: UIView!

    @IBInspectable var buttonsCornerRadius: CGFloat = 5 {
        didSet {
            languagesButton.layer.cornerRadius = buttonsCornerRadius
            keyboardSettingsButton.layer.cornerRadius = buttonsCornerRadius
            aboutButton.layer.cornerRadius = buttonsCornerRadius
            helpButton.layer.cornerRadius = buttonsCornerRadius
        }
    }

    override func prepareForInterfaceBuilder() {
        languagesButton.layer.cornerRadius = buttonsCornerRadius
        keyboardSettingsButton.layer.cornerRadius = buttonsCornerRadius
        aboutButton.layer.cornerRadius = buttonsCornerRadius
        helpButton.layer.cornerRadius = buttonsCornerRadius
    }
}

我在界面构建器中有这个属性:

enter image description here

但它永远不会更新我的故事板。当我运行我的应用程序时,它只是崩溃而没有消息。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

正如我在评论中所说,你所有的IBOutlets在这个阶段都是零。在展开“可选”值时,您有一个"意外发现的nil

我可以建议的是创建一个UIView的自定义类,然后在这个类中,你可以添加一个属性" cornerRadius"像这样@IBInspectable

import UIKit

@IBDesignable

class MyCustomView:UIView {
    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
        }
    }
}

使用此方法,每次更改IB中的值时,您的视图都将更新。