从 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 中连接它们。

  1. Utilites(右面板)-> Connection Inspector - 从 IBOutlets 列表中拖动。
  2. 文档大纲(左面板)- 从 MyDetailViewController
  3. 中拖动
  4. 当您在 Interface Builder 中选择了 UIViewController 时,从黄色圆圈拖动

注意:所有UIViewController子类都继承了一个名为view的IBOutlet;此 属性 已经存在于 Interface Builder 中,即使您不能单击 + 拖动来连接它。

所有 sub-classes 都可以直接访问 super-class 中的 outlets。因此,您可以直接在相应的 sub-class 中更改 outletsproperties。像这样:

class MySubClass: MySuperClass {
    override func viewDidLoad() {
        super.viewDidLoad()
        mySuperClassOutlet.text = "This overrides superclass text"
    }
}