当前的问题和我想知道的事情
UIBarButtonItem操作方法在某些情况下不起作用。我想知道为什么它不起作用。
情况1
case1 storyboard
刚刚将NavigationController添加到默认的ViewController
import UIKit
class ViewController: UIViewController {
let okButton = UIBarButtonItem(title: "OK", style: .plain, target: self, action: #selector(okButtonTapped(_:)))
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.rightBarButtonItem = okButton
}
@objc func okButtonTapped(_ sender: UIBarButtonItem) {
print("OK!")
}
}
在这种情况下,“确定”按钮不起作用。
没有错误信息。
案例2
case2 storyboard
向默认的ViewController添加了导航栏。
UINavigationItem以名称myNavigationItem连接到插座。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myNavigationItem: UINavigationItem!
let okButton = UIBarButtonItem(title: "OK", style: .plain, target: self, action: #selector(okButtonTapped(_:)))
override func viewDidLoad() {
super.viewDidLoad()
myNavigationItem.rightBarButtonItem = okButton
}
@objc func okButtonTapped(_ sender: UIBarButtonItem) {
print("OK!")
}
}
在这种情况下,“确定”按钮将起作用。
概要
我了解即使在情况1中,如果在viewDidLoad中执行okButton初始化,它也会起作用。
我想知道为什么case2有效,而case1不起作用。
谢谢你
最佳答案
如果在okButton
之前初始化viewDidLoad
,则无法设置目标self
。所以在viewDidLoad
中初始化按钮
class ViewController: UIViewController {
var okButton:UIBarButtonItem?
override func viewDidLoad() {
super.viewDidLoad()
okButton = UIBarButtonItem(title: "OK", style: .plain, target: self, action: #selector(okButtonTapped(_:)))
self.navigationItem.rightBarButtonItem = okButton
}
@objc func okButtonTapped(_ sender: UIBarButtonItem) {
print("OK!")
}
}
关于ios - UIBarButtonItem操作方法在某些情况下不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57643852/