【问题标题】:iOS. Interface Builder @IBInspectable crashesIOS。 Interface Builder @IBInspectable 崩溃
【发布时间】:2015-02-17 10:22:23
【问题描述】:

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

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

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

【问题讨论】:

  • 您是否得到“在展开可选值时意外发现 nil”?因为我认为你所有的 IBOutlet 属性都是 nil

标签: ios swift interface-builder ibdesignable ibinspectable


【解决方案1】:

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

我可以建议创建一个UIView 的自定义类,然后在这个类中,您可以像这样添加一个属性“cornerRadius”作为@IBInspectable

import UIKit

@IBDesignable

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

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

【讨论】:

  • 不需要子类。可以是扩展。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 2010-12-07
  • 2012-06-22
  • 2022-11-28
  • 2019-07-23
  • 2012-09-16
  • 2018-11-23
相关资源
最近更新 更多