如何检测何时按下 UIBarButtonItem?

How to detect when pressing down on UIBarButtonItem?

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

我目前的想法是,也许 UITabBarControllerDelegate 中有一个方法?

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

谢谢,这个问题让我耽误了好几个小时!

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

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

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

您可以使用 touchesBegan 来检测触摸,并使用 touchesEnded 来检测栏按钮项目上的 "tap"。

class MyCustomBarButtonItem: UIView {
    // ...

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

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

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

这些是当用户选择 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")
}