Swift 为什么UIBarbuttonite的目标和行动是零?

Swift 为什么UIBarbuttonite的目标和行动是零?,swift,uinavigationbar,uibarbuttonitem,Swift,Uinavigationbar,Uibarbuttonitem,我想在swift中以编程方式按UIBarButtonItem。我查看了stackoverflow中提出的其他问题,并做了相同的操作,但没有起作用。手动单击时执行我想要的操作,但我需要以编程方式单击。 我的示例代码是 override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let items = self.navigationItem.rightBarButtonItems

我想在swift中以编程方式按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...")
}

在viewDidLoad中添加如下导航栏按钮项:

navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Go", style: .plain, target: self, action: #selector(yourFunctionToCall)) 
现在编写按钮操作的函数

@objc func yourFunctionToCall() {
    print("function called...")
}
self.navigationItem.rightBarButtonItems.first
将返回
UIBarButtonItem
而不是您的
continuousVisitsButton
按钮,并且您已将
目标和选择器设置为您的
continuousVisitsButton
而不是
UIBarButtonItem

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

self.navigationItem.rightBarButtonItems = [UIBarButtonItem(customView: continuousVisitsButton)
很明显,您的rightBarButton项既没有目标也没有动作,因此打印返回零

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

。希望这有帮助

self.navigationItem.rightBarButtonItems.first
将返回
UIBarButtonItem
而不是您的
continuousVisitsButton
按钮,并且您已将
目标和选择器设置为您的
continuousVisitsButton
而不是
UIBarButtonItem

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

self.navigationItem.rightBarButtonItems = [UIBarButtonItem(customView: continuousVisitsButton)
很明显,您的rightBarButton项既没有目标也没有动作,因此打印返回零

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


。希望这对您有所帮助

您是如何添加导航栏项目的?@SandeepBhandari in viewDidLoad.->。让continuousVisitsButton=Util.createRightButton(“ic_skip_next”)continuousVisitsButton.addTarget(self,action:#选择器(continuousVisitsButtonPressed),for:UIControlEvents.touchUpInside)self.navigationItem.rightBarButtonItems=[UIBarButtonItem(customView:continuousVisitsButton)、Util.createSpaceItem()、UIBarButtonim(customView:timeFilterButton)]您是否检查了提供的解决方案?是否有效?如何添加导航栏项?@Sandeppebhandari在viewDidLoad中。->。让continuousVisitsButton=Util.createRightButton(“ic_skip_next”)continuousVisitsButton.addTarget(self,action:#选择器(continuousVisitsButtonPressed),for:UIControlEvents.touchUpInside)self.navigationItem.rightBarButtonItems=[UIBarButtonItem(customView:continuousVisitsButton),Util.createSpaceItem(),UIBarButtonItem(customView:timeFilterButton)]您是否检查了提供的解决方案?它是否有效?非常感谢我理解我的错误祝您愉快:)@user9413194:很高兴我能帮助您:+1非常感谢我理解我的错误祝您愉快:)@user9413194:很高兴我能帮助您:+1