[英]UIBarButtonItem Long Press / Short Press
我已经查看了关于这个主题的现有问题,在 iOS 11 之后似乎没有答案(这似乎打破了手势识别器)。
有没有办法检测 UIBarButtonItem 上的短按/长按? Apple 在 Pages、Numbers、Keynote 中使用此功能进行撤消/重做。
只需为点击事件替换您的默认事件处理程序
-(void)handlerForBarButton:(UIBarButtonItem*)p_Sender
及其扩展版本
-(void)handlerForBarButton:(UIBarButtonItem*)p_Sender forEvent:(UIEvent*)p_Event
通过检查 UIEvent 对象,您可以了解事件是否是长按(第一个 UITouch 对象的 tapCount 为 0)。
这是我的播放速率按钮代码,如果条形按钮项目被按下约一秒钟,则将速率返回到“1x”:
/*
rateButtonPressed:forEvent:
*/
- (IBAction)rateButtonPressed:(UIBarButtonItem*)p_Sender
forEvent:(UIEvent*)p_Event
{
UITouch* firstTouch = nil;
if ( (nil != ((firstTouch = p_Event.allTouches.allObjects.firstObject)))
&& (0 == firstTouch.tapCount))
{
self.avAudioPlayer.rate = 1.0;
}
else
{ // Default tap
if (2.0 == self.avAudioPlayer.rate)
{
self.avAudioPlayer.rate = 0.5;
}
else
{
self.avAudioPlayer.rate += 0.25;
}
}
[WBSettingsSharedInstance.standardUserDefaults setDouble:self.avAudioPlayer.rate
forKey:@"audioPlayerRate"];
[self updateRateBarButton];
}
尝试这个
@IBOutlet weak var btn: UIButton!
override func viewDidLoad() {
let tapGesture = UITapGestureRecognizer(target: self, #selector (tap)) //Tap function will call when user tap on button
let longGesture = UILongPressGestureRecognizer(target: self, #selector(long)) //Long function will call when user long press on button.
tapGesture.numberOfTapsRequired = 1
btn.addGestureRecognizer(tapGesture)
btn.addGestureRecognizer(longGesture)
}
@objc func tap() {
print("Single tap done")
}
@objc func long() {
print("Long gesture recognized")
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.