我最近開始學習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