如何检测何时按下 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")
}
我想在用户按下 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")
}