В IB
из IBOutlet
стенд для I nterface B uilder и представляет соединение от интерфейса строителя к исходному коду. Присвоение IBOutlet
программным способом не могло иметь меньшего смысла.
IBOutlet
- это просто переменная экземпляра класса, которая привязана к части интерфейса или может быть установлена через построитель интерфейса. Если нам нужна ссылка на нашу кнопку (точно так же мы будем ссылаться на нее, если бы сделали ее в построителе интерфейса), мы просто добавляем свойство к нашему классу и затем назначаем нашу вновь созданную кнопку:
class MyViewController: UIViewController {
var someBarButton: UIBarButtonItem?
override func viewDidLoad() {
super.viewDidLoad()
self.someBarButton = UIBarButtonItem(title: "Menu", style: .Plain, target: nil, action: nil)
self.navigationItem.leftBarButtonItem = self.someBarButton
}
}
И теперь, someBarButton
наш "IBOutlet".
Некоторые заметки ...
Там довольно приличный шанс, что мы не могли бы на самом деле хотят, чтобы делать вещи таким образом.
Это создает дополнительную крепкую ссылку на кнопку (self.navigationItem
уже имеет прочную ссылку на ее leftBarButtonItem
).
Вы заметите, что если вы создали IBOutlet
из конструктора интерфейса, он настроен как свойство weak
. Так что, возможно, нам нужна слабая собственность?
Но мы можем на самом деле сделать себя лучше. Попробуйте это для размера:
var leftNavBarButton: UIBarButtonItem? {
get {
return self.navigationItem.leftBarButtonItem
}
set (newValue) {
self.navigationItem.leftBarButtonItem = newValue
}
}
Теперь self.leftNavBarButton
существу просто удобный способ доступа к self.navigationItem.leftBarButtonItem
.
'IB'' IBOutlet' означает ** I ** nterface ** B ** uilder и представляет собой соединение от конструктора интерфейса к исходному коду. Назначение «IBOutlet» программно не могло иметь меньшего смысла. Что вы на самом деле пытаетесь сделать? – nhgrif