我想在修改IBOutlet属性的框架中创建一个超类。但是,我想将一个子类连接到storyboard,因为我不想将控件连接到框架中的类。
例如,我的框架中的超类看起来像这样:
public class MySuperDetailViewController: UIViewController {
@IBOutlet public weak var titleLabel: UILabel?
@IBOutlet public weak var dateLabel: UILabel?
@IBOutlet public weak var contentWebView: UIWebView?
...
}
然后在子类中,我想控制 - 将控件拖到子类上。所以我必须通过覆盖来公开这些属性。我试图这样做,但它不允许我:
class MyDetailViewController: MySuperDetailViewController {
@IBOutlet weak var titleLabel: UILabel?
@IBOutlet weak var dateLabel: UILabel?
@IBOutlet weak var contentWebView: UIWebView?
}
我得到的错误是:Cannot override with a stored property 'titleLabel', 'dateLabel', and 'contentWebView'
。
我该如何做到这一点或更好地解决这个问题?
答案 0 :(得分:14)
不要尝试在子类中重新创建变量; IBOutlet
变量仍然存在。您仍然可以通过多种方式在Interface Builder内部连接它们。
MyDetailViewController
注意:所有UIViewController
子类都继承了名为view
的IBOutlet;即使您无法单击+拖动以连接它,此属性也已存在于Interface Builder中。
答案 1 :(得分:0)
所有sub-classes
都可以直接访问outlets
中的super-class
。因此,您可以直接在相应的properties
中更改outlets
中的sub-class
。像这样:
class MySubClass: MySuperClass {
override func viewDidLoad() {
super.viewDidLoad()
mySuperClassOutlet.text = "This overrides superclass text"
}
}