按下 UIBarButtonItem 时如何检测?
Posted
技术标签:
【中文标题】按下 UIBarButtonItem 时如何检测?【英文标题】:How to detect when pressing down on UIBarButtonItem? 【发布时间】:2020-06-14 08:32:17 【问题描述】:我想在用户按下 UITabBarItem 时实现缩放动画。如何检测 tabBar 中的 tabBarItem 何时被按下?
到目前为止,我的想法是UITabBarControllerDelegate
中可能有一个方法?
我还没有看到关于这个的 SO 问题...
谢谢,这个问题一直困扰着我!
【问题讨论】:
道歉!,我的意思是 UITabBarItem 不是 UIBarButtonItem 对于标签栏,我认为您需要创建自己的UITabBar
和UITabBarController
版本:(...
@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 仅在按下足够长的时间时才会触发动作