为什么UIBarButtonItem目标和操作无效?

问题描述 投票:0回答:2

我想以编程方式快速按下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
}
swift uinavigationbar uibarbuttonitem
2个回答
0
投票

在viewDidLoad中添加像这样的导航栏按钮项:

navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Go", style: .plain, target: self, action: #selector(yourFunctionToCall)) 

现在编写按钮动作的功能

@objc func yourFunctionToCall() {
    print("function called...")
}

0
投票
    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,因此与其尝试将触摸事件发送到条形按钮项,还不尝试访问其自定义视图并向其发送触摸事件,而是实际触发选择器:)

。希望对您有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.