【发布时间】:2017-07-31 06:05:36
【问题描述】:
我最近开始学习 Swift。当我尝试制作我的第一个 App 时,我对 UIBarButtonItem 感到困惑。如果我把 let UIBarButtonItem 初始化放在 viewDidLoad() 函数之外,当我按下 Next 按钮时什么也不会发生。
class ViewController: UIViewController, UITextFieldDelegate {
let rightBarButton: UIBarButtonItem = UIBarButtonItem(title: "Next", style: .plain, target: self, action: #selector(onClickNext(button:)))
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
self.navigationItem.rightBarButtonItem = rightBarButton
}
func onClickNext(button: UIBarButtonItem) {
print("should push view controller")
}
}
但是,当我将initialization 放入viewDidLoad() 函数时,输出区域确实输出了我在onClickNext(button:) 函数中设置的句子。
class ViewController: UIViewController, UITextFieldDelegate {
var rightBarButton: UIBarButtonItem?
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
self.rightBarButton = UIBarButtonItem(title: "Next", style: .plain, target: self, action: #selector(onClickNext(button:)))
self.navigationItem.rightBarButtonItem = rightBarButton
}
func onClickNext(button: UIBarButtonItem) {
print("should push view controller")
}
}
另外,我发现当我将initialization 放在viewDidLoad() 函数之外,并在viewController 中添加UITextField 时,如果我在按下之前触摸textfield,rightBarButton 就会起作用按钮。
这让我很困惑。机制是什么?
【问题讨论】:
-
非常好的问题
-
这应该是bug,可以参考这个问题:stackoverflow.com/questions/43842928/…
标签: ios swift uibarbuttonitem