为什么 UIBarButtonItem 目标和操作为零?

Why UIBarButtonItem target and action comes nil?

我想在 swift 中以编程方式按下 UIBarButtonItem。我查看了 Whosebug 中提出的其他问题并做了同样的事情,但是当手动单击时它没有 work.doing 我想要的,但我需要以编程方式单击。 我的示例代码是

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 将 return UIBarButtonItem 不是您的 continuousVisitsButton 按钮,并且您已将 target 和选择器设置为 continuousVisitsButton 而不是你的 UIBarButtonItem

事实上,您只是用 customView 创建了一个 UIBarButtonItem 并将其设置为右栏按钮项。

self.navigationItem.rightBarButtonItems = [UIBarButtonItem(customView: continuousVisitsButton)

很明显,您的 rightBarButton 项既没有目标也没有操作,因此打印 returns nil。

您需要的是其中配置了这两个属性的 customView,因此与其尝试将触摸事件发送到栏按钮项,不如访问其自定义视图并向其发送触摸事件,以实际触发选择器:)

。希望这有帮助