从 super class 覆盖 IBOutlet 属性?
Override IBOutlet properties from super class?
我想在修改 IBOutlet 属性的框架中创建一个超级 class。但是,我希望将 subclass 连接到故事板,因为我不想将控件连接到框架中的 class。
例如我的框架中的超级class是这样的:
public class MySuperDetailViewController: UIViewController {
@IBOutlet public weak var titleLabel: UILabel?
@IBOutlet public weak var dateLabel: UILabel?
@IBOutlet public weak var contentWebView: UIWebView?
...
}
然后在子class中,我想按住控制键将控件拖到子class上。所以我必须通过覆盖来公开这些属性。我正在尝试这样做,但它不允许我:
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'
。
我该如何做或更好的方法?
不要尝试在子类中重新创建变量; IBOutlet
变量仍然存在。您仍然可以通过多种方式在 Interface Builder 中连接它们。
- Utilites(右面板)-> Connection Inspector - 从 IBOutlets 列表中拖动。
- 文档大纲(左面板)- 从
MyDetailViewController
中拖动
- 当您在 Interface Builder 中选择了 UIViewController 时,从黄色圆圈拖动
注意:所有UIViewController
子类都继承了一个名为view
的IBOutlet;此 属性 已经存在于 Interface Builder 中,即使您不能单击 + 拖动来连接它。
所有 sub-classes
都可以直接访问 super-class
中的 outlets
。因此,您可以直接在相应的 sub-class
中更改 outlets
的 properties
。像这样:
class MySubClass: MySuperClass {
override func viewDidLoad() {
super.viewDidLoad()
mySuperClassOutlet.text = "This overrides superclass text"
}
}
我想在修改 IBOutlet 属性的框架中创建一个超级 class。但是,我希望将 subclass 连接到故事板,因为我不想将控件连接到框架中的 class。
例如我的框架中的超级class是这样的:
public class MySuperDetailViewController: UIViewController {
@IBOutlet public weak var titleLabel: UILabel?
@IBOutlet public weak var dateLabel: UILabel?
@IBOutlet public weak var contentWebView: UIWebView?
...
}
然后在子class中,我想按住控制键将控件拖到子class上。所以我必须通过覆盖来公开这些属性。我正在尝试这样做,但它不允许我:
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'
。
我该如何做或更好的方法?
不要尝试在子类中重新创建变量; IBOutlet
变量仍然存在。您仍然可以通过多种方式在 Interface Builder 中连接它们。
- Utilites(右面板)-> Connection Inspector - 从 IBOutlets 列表中拖动。
- 文档大纲(左面板)- 从
MyDetailViewController
中拖动
- 当您在 Interface Builder 中选择了 UIViewController 时,从黄色圆圈拖动
注意:所有UIViewController
子类都继承了一个名为view
的IBOutlet;此 属性 已经存在于 Interface Builder 中,即使您不能单击 + 拖动来连接它。
所有 sub-classes
都可以直接访问 super-class
中的 outlets
。因此,您可以直接在相应的 sub-class
中更改 outlets
的 properties
。像这样:
class MySubClass: MySuperClass {
override func viewDidLoad() {
super.viewDidLoad()
mySuperClassOutlet.text = "This overrides superclass text"
}
}