【问题标题】:Override IBOutlet properties from super class?覆盖超类的 IBOutlet 属性?
【发布时间】:2016-04-03 22:36:11
【问题描述】:

我想在修改 IBOutlet 属性的框架中创建一个超类。但是,我希望将子类连接到情节提要,因为我不想将控件连接到框架中的类。

例如,我的框架中的超类是这样的:

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'

我怎样才能做到这一点或更好的方法呢?

【问题讨论】:

    标签: ios swift iboutlet


    【解决方案1】:

    不要尝试在子类中重新创建变量; IBOutlet 变量仍然存在。您仍然可以通过多种方式在 Interface Builder 中连接它们。

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-07-26
        • 1970-01-01
        • 2019-09-29
        • 2015-09-12
        • 1970-01-01
        • 2013-07-24
        • 2015-10-14
        • 2011-07-12
        • 2013-04-05
        相关资源
        最近更新 更多