iOS. Interface Builder @IBInspectable 崩溃

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
    }
}

我在我的界面生成器中有这个属性:
但是它从来没有更新我的故事板。当我运行应用程序时,它只是崩溃了,没有任何信息。

1
你是否遇到了“在解包可选值时意外发现nil”的错误?因为我认为你所有的IBOutlet属性都是nil。 - Ali Abbas
1个回答

3

就像我在评论中说的那样,在这个阶段,你所有的IBOutlets都是空的。你遇到了一个“unexpectedly found nil while unwrapping an Optional value”的错误。

我可以建议你创建一个自定义的UIView类,然后在这个类内部,你可以添加一个带有@IBInspectable修饰符的属性“cornerRadius”,如下所示:

import UIKit

@IBDesignable

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

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


不需要子类,可以使用扩展。 - Rudolf Adamkovič

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