3

我正在尝试这个 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
    }
}

我的界面生成器中有这个属性:

在此处输入图像描述

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

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

3

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

我可以建议的是创建一个自定义类,UIView然后在这个类中,您可以添加一个属性“cornerRadius”,@IBInspectable如下所示:

import UIKit

@IBDesignable

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

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

于 2015-02-17T12:58:25.363 回答