繁体   English   中英

UIBarButtonItem 长按/短按

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM