我有一个超类,我将UIView实例化为具有红色背景色的属性。在我的子类中,我想覆盖此属性,但将其作为 IBOutlet。这可能吗?因此,我希望我的所有子类都可以通过覆盖超类的视图,在故事板中具有红色背景的视图。我正在尝试将此逻辑实现为更复杂的概念,但我使用 UIView 只是为了简单起见。这是不起作用的代码:
class SuperClass: UIViewController {
lazy var myView: UIView! = {
let aView = UIView()
aView.backgroundColor = .red
return aView
}()
}
class SubclassVC: SuperClass {
@IBOutlet override var myView: UIView! {
get { return super.myView }
set {}
}
}
有什么建议吗?
IBOutlet
只是对Interface Builder的一个提示。IBOutlets可以是任何东西。UIView, UIButton, UITextView,
等
@IBOutlet weak var myView: UIView!
在上面的代码中,myView 只是对情节提要或 XIB 中已创建的视图的引用
IBOutlet的作用:
对象可以通过以下方式与应用程序中的其他对象进行通信 向网点发送消息。插座可以引用 应用程序:用户界面对象,如文本字段和按钮, 模型对象(通常是自定义类的实例(,甚至 应用程序对象本身。插座是特殊的实例变量 因为它们可以在界面生成器中设置。
和:
注意:IBOutlet 是 C 预处理器删除的空定义宏 在编译时。界面生成器使用它来识别插座 声明,以便在连接插座时显示它们 视觉。
总结:
IBOutlets几乎可以引用任何东西。它们只是一个提示 界面生成器,可让您在加载时设置其值 十一。事实上,文本IBOutlet在 界面构建器世界,它从最终产品中剥离 因为它完全无法用于除 帮助界面生成器。
我会回去看看你正在勾搭的其他一些东西 作为IBOutlets,你一定会发现他们确实有一些 真实类型。
相反,您可以尝试以下操作
class SuperClass: UIViewController {
@IBOutlet weak var myView: UIView!{
didSet {
myView.backgroundColor = .red
}
}
}
class SubclassVC: SuperClass {
func updateMyView() {
//Note : You can customise the view and it is available as IBOutlet
myView.backgroundColor = .orange
}
}
使用继承,您可以将插座连接到基类并使用它 在子类中,您可以根据需要更新它