Переопределить свойства 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
переменные все еще существуют. Вы все еще можете подключить их в Интерфейсном Разработчике несколькими способами.
- Утилиты (правая панель) -> Инспектор соединений - перетащите из списка IBOutlets.
- Структура документа (левая панель) - перетащите из
MyDetailViewController
- Перетащите из желтого круга, когда в Интерфейсном Разработчике выбран 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"
}
}