按下 UIBarButtonItem 时如何检测?

Posted

技术标签:

【中文标题】按下 UIBarButtonItem 时如何检测?【英文标题】:How to detect when pressing down on UIBarButtonItem? 【发布时间】:2020-06-14 08:32:17 【问题描述】:

我想在用户按下 UITabBarItem 时实现缩放动画。如何检测 tabBar 中的 tabBarItem 何时被按下?

到目前为止,我的想法是UITabBarControllerDelegate 中可能有一个方法?

我还没有看到关于这个的 SO 问题...

谢谢,这个问题一直困扰着我!

【问题讨论】:

道歉!,我的意思是 UITabBarItem 不是 UIBarButtonItem 对于标签栏,我认为您需要创建自己的UITabBarUITabBarController 版本:(... @Sweeper 是的,不幸的是这种情况 【参考方案1】:

总体思路是,您需要创建自己的自定义UIView,然后将其传递给this initialiser。

let customView = MyCustomBarButtonItem()
let barButtonItem = UIBarButtonItem(customView: customView)

至于如何实现自定义视图以便检测触地得分,您有很多选择。

您可以使用touchesBegan 来检测触摸,并使用touchesEnded 来检测栏按钮项目上的“点击”。

class MyCustomBarButtonItem: UIView 
    // ...

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
        // ...
    

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) 
        // ...
    

另一种方法是继承UIButton,并为.touchDown/.touchUpInside 控制事件添加目标/动作对。

【讨论】:

您也可以继承UIControl(或UIButton,没关系)并将didSet观察者添加到isHighlighted。按下时为true,否则为false。此外,它还可以处理触地和移出盒子【参考方案2】:

这些是当用户选择 tabBarItem 时调用的委托方法:

// UITabBarDelegate
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) 
    print("Selected item")


// UITabBarControllerDelegate
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) 
    print("Selected view controller")

【讨论】:

嗯,是的,但这只是选择之后(即在用户放手之后..),但是我需要在按下时制作动画...... :)

以上是关于按下 UIBarButtonItem 时如何检测?的主要内容,如果未能解决你的问题,请参考以下文章

UIBarButtonItem 仅在我滑动时被调用

自定义“按下” UIBarButtonItem 背景

UIBarButtonItem 仅在按下足够长的时间时才会触发动作

按下时以编程方式移除 UIBarButtonItem 上的灯光?

Swift,与 UIBarButtonItem 混淆

uibarbuttonitem 高亮色调/颜色