我以编程方式向视图控制器添加了一个条形按钮项:
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Menu", style: .Plain, target: nil, action: nil)
}
现在我想以编程方式将该按钮项分配给IBOutlet
。我怎么用Swift做到这一点?
答案 0 :(得分:15)
IB
IBOutlet
代表我 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
的便捷方式。
答案 1 :(得分:1)
您的意思是在代码中而不是在IB中为按钮指定操作。你的问题措辞有些令人困惑,但没关系。
您使用target
构造函数的action
和UIBarButtonItem
参数。 target
是您的控制者,通常为self
; action
是一个字符串,它是该控制器包含的按钮处理程序的选择器签名。
self.someBarButton = UIBarButtonItem(title: "Menu", style: .Plain,
target: self, action: "buttonHandler:")