我想以编程方式快速按下UIBarButtonItem
。我查看了stackoverflow中提出的其他问题,并做了同样的事情,但没有成功。手动单击时做了我想要的,但是我需要以编程方式单击。我的示例代码是
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let items = self.navigationItem.rightBarButtonItems
let item = items?.first
UIApplication.shared.sendAction(item.action, to: item?.target, from: nil, for: nil) // not working
_ = item.target?.perform(item.action, with: nil) // not working
let action = item.action // result is nil
let target = item.target / result is nil and item is not nil
}
在viewDidLoad中添加像这样的导航栏按钮项:
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Go", style: .plain, target: self, action: #selector(yourFunctionToCall))
现在编写按钮动作的功能
@objc func yourFunctionToCall() {
print("function called...")
}
let items = self.navigationItem.rightBarButtonItems
let item = items?.first
(item.customView as? UIButton).sendActions(for: .touchUpInside)
[self.navigationItem.rightBarButtonItems.first
将返回UIBarButtonItem
而不是continuousVisitsButton
按钮,并且您已将target
和选择器设置为continuousVisitsButton
,而不是UIBarButtonItem
实际上,您只是使用customView创建了UIBarButtonItem
并将其设置为右键栏按钮项。
self.navigationItem.rightBarButtonItems = [UIBarButtonItem(customView: continuousVisitsButton)
很显然,您的rightBarButton项既没有目标也没有动作,因此打印将返回nil。
您需要的是在其内部配置了这两个属性的customView,因此与其尝试将触摸事件发送到条形按钮项,还不尝试访问其自定义视图并向其发送触摸事件,而是实际触发选择器:)
。希望对您有所帮助