我最近开始学习Swift。当我试图让我的第一个App
我与UIBarButtonItem
混淆。如果我在viewDidLoad()
函数之外放置UIBarButtonItem
初始值,当按下一个按钮时不会发生任何反应。Swift,与UIBarButtonItem混淆
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:)
功能设置的sentense。
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()
功能外,还加了一个UITextField
到viewController
的rightBarButton
作品,如果我碰textfield
之前,我按下按钮。
这让我感到困惑。什么是机制?
非常好的问题 –
这应该是一个错误,你可以参考一下这个问题:https://stackoverflow.com/questions/43842928/ios-lazy-var-uibarbuttonitem-target-issue – user5685969