【问题标题】:How to fire a UIBarButtonItem tap event manually?如何手动触发 UIBarButtonItem 点击事件?
【发布时间】:2020-10-03 17:24:39
【问题描述】:

我有一个自定义 UIButton,它是 UIBarButtonItem 的子视图:

guard let tab1 = self.tabBar.items![0].value(forKey: "view") as? UIView else {return}

    let button2Test = UIButton()
    tab1.addSubview(button2Test)

自定义 UIButton,有一个目标:

button2Test.addTarget(self, action: #selector(buttonTouchUpInsideP3), for: [.touchUpInside])
button2Test.addTarget(self, action: #selector(buttonTouchInsideBoundsP3), for: [.touchDown, .touchDragEnter])
button2Test.addTarget(self, action: #selector(buttonDraggedOutOfBoundsP3), for: [.touchDragExit, .touchCancel])

基本上,在 buttonTouchUpInsideP3 函数中,我想以编程方式/手动使 UIBarButtonItem 在特定索引处像被点击一样触发,因为 UIButton 的目标不允许实际UIBarButtonItem 下面要被敲击了,可惜...

由于错误而没有成功的尝试是:(我从outdated Q 得到的)。请注意,我在 buttonTouchUpInsideP3 目标函数中调用它,一旦你松开按钮。

let homeTabBarItem = self.tabBar.items![0]
UIApplication.sharedApplication.sendAction(homeTabBarItem.action, to: homeTabBarItem.target, from: nil, forEvent: nil)

【问题讨论】:

  • @Frankenstein 好吧,我添加了更多解释和适当的代码示例。
  • 类和函数在哪里?
  • @Frankenstein 嗯,这个 SO 问题是关于如何做特定的事情,而不是错误修复问题之类的事情......这不是你必须复制的问题,只是一个关于如何做的问题做一些事情,因为我似乎无法找到关于它的问题......

标签: ios swift uibutton uibarbuttonitem uitabbar


【解决方案1】:

你可以直接设置 UIBarButtonItem 的 target 和 action 属性。

【讨论】:

  • 好吧,我在故事板中设置了 UITabBar 和选项卡...我想使用由于故事板内容而设置的本机目标和操作,只需调用它手动。所以在实践中,基本上,当 TouchUpInisde 目标基金为我的自定义 UIButton 运行时,我想表现得好像我选择了条形按钮项目......
  • 将 UIButton 作为 UIBarButtonItem 的子视图的目的是什么?我不确定我是否理解。 UIBarButtonItem 已经可以充当按钮,所以我看不出有必要。
  • 我使用 UIButton 以便当您在 UIButton 上执行 touchDown 或 touchExit/touchCancel 等操作时制作自定义动画,该 UIButton 也用作标签栏上的图标。
  • 好的,我明白了,所以也许你有问题,你有没有检查过 UIBarButtonItem 是否在 UIButton 之前触发?如果发生这种情况,则操作将永远不会到达 UIButton,因为在这种情况下 UIBarButtonItem 是第一个响应者,并且永远不会触发选择器
  • 问题是,由于我的自定义 UIButton 位于 UIBarButtonItem 上方,因此 UIBarButtonItem 根本不会触发,这就是为什么我想手动触发它。我的自定义 UIButton 本质上用作 UIBarButtonItem,我所需要的只是能够以编程方式触发 UIBarButtonItem(即在下面..)...
【解决方案2】:

我想出了怎么做:

tabBarController.selectedIndex = 0

只要把它放在 buttonTouchUpInside 函数中! ;)

您可能还应该调用:

self.tabBar(self.tabBar, didSelect: self.tabBar.items![0])

【讨论】:

    猜你喜欢
    • 2016-04-19
    • 2017-02-16
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2023-03-27
    相关资源
    最近更新 更多