Переопределить свойства IBOutlet из суперкласса?

Я хотел бы создать суперкласс в структуре, которая изменяет свойства 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',

Как я могу сделать это или лучше подходить к этому?

1 ответ

Решение

Не пытайтесь воссоздать переменные в подклассе; IBOutlet переменные все еще существуют. Вы все еще можете подключить их в Интерфейсном Разработчике несколькими способами.

  1. Утилиты (правая панель) -> Инспектор соединений - перетащите из списка IBOutlets.
  2. Структура документа (левая панель) - перетащите из MyDetailViewController
  3. Перетащите из желтого круга, когда в Интерфейсном Разработчике выбран UIViewController

Примечание: все UIViewController подклассы наследуют IBOutlet с именем view; это свойство уже существует в Интерфейсном Разработчике, даже если вы не можете нажать + перетащить, чтобы подключить его.

Все sub-classes получить прямой доступ к outlets в super-class. Так что вы можете просто изменитьproperties из outlets непосредственно в соответствующих sub-class. Как это:

class MySubClass: MySuperClass {
    override func viewDidLoad() {
        super.viewDidLoad()
        mySuperClassOutlet.text = "This overrides superclass text"
    }
}
Другие вопросы по тегам