如何只屏蔽headerView上的长按事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何只屏蔽headerView上的长按事件相关的知识,希望对你有一定的参考价值。

ListView使用addHeaderView(View)添加了一个headerView,ListView注册了长按监听事件现在问题出来了,headerView上长按也能触发,点击menu项后系统崩溃如何只屏蔽headerView上的长按事件呢?使用过addHeaderView(view,data,false)方法无效

参考技术A 解决了,如果((AdapterContextMenuInfo) menuInfo).id == -1,可以判定是HeaderView 参考技术B 长按的时候通过positon判断是否是header行,是的话就return

Swift - 按钮上的长按手势以使用 AVFoundation 录制音频

【中文标题】Swift - 按钮上的长按手势以使用 AVFoundation 录制音频【英文标题】:Swift - LongPress Gesture on Button to record Audio with AVFoundation 【发布时间】:2016-11-14 15:20:27 【问题描述】:

我正在尝试为我的聊天实现一个记录按钮,只要您按住该按钮,它就会记录下来。我实现了一个longpressGestureRecognizer,但不幸的是它只记录一秒钟,无论我按下多长时间。

代码如下:

let longPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(longPress(_:)))
    longPressGestureRecognizer.minimumPressDuration = 1


    self.recordingSession = AVAudioSession.sharedInstance()

    do 
        try self.recordingSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try self.recordingSession.setActive(true)
        self.recordingSession.requestRecordPermission()  [unowned self] allowed in
            DispatchQueue.main.async 
                if allowed 
                    self.record_button.addGestureRecognizer(longPressGestureRecognizer)
                 else 
                    // failed to record!
                
            
        
     catch 
        // failed to record!
    

// Gesture Recognizer for the Record Button, so as long as it is pressed, record!
func longPress(_ longPressGestureRecognizer: UILongPressGestureRecognizer)
    if longPressGestureRecognizer.state == .ended 
        print("long press ended")
        let recordImage = UIImage(named: "ic_mic_white")
        record_button.setImage(recordImage, for: .normal)
        self.recordTapRelease()
    
    if longPressGestureRecognizer.state == .began 
        let recordingTapImage = UIImage(named: "ic_mic_none_white")
        record_button.setImage(recordingTapImage, for: .normal)
        self.recording()

    

编辑 我实现了 .touchdown .touchupinside 事件等。 我仍然会得到相同的行为,除非我稍微高于记录按钮离开橙色视图。然后录制图像按钮图像也会改变,显示正在录制,如果我松开并进一步向上移动它会停止录制。

【问题讨论】:

你有没有解决这个问题让你满意?如果你这样做了,你会分享你是如何达到预期结果的吗?我正在尝试做同样的事情,并希望得到一些帮助。 【参考方案1】:

您甚至不必创建UILongPressGestureRecognizer 即可实现此目的;您可以通过为 UIButton 实现 touchDowntouchUpInsidetouchDragExit 事件来实现。

乍一看,它似乎比使用UILongPressGestureRecognizer 更复杂,但我认为它更符合逻辑,更易读。

按照this answer 中的步骤操作,希望您的录制按钮能够获得所需的行为。如果您坚持使用UILongPressGestureRecognizer,它还有另一个答案。

希望这会有所帮助。

【讨论】:

它有所帮助,但仍然无法正常工作。检查我的编辑

以上是关于如何只屏蔽headerView上的长按事件的主要内容,如果未能解决你的问题,请参考以下文章

按钮上的长按事件[重复]

Android webview 去掉页面文字存在的“选中文字”的长按震动效果

如何处理Android导航栏菜单键上的长按?

如何在代号一中获取文本字段的长按事件

SwiftUI - 如何检测按钮上的长按?

JS 监听键盘上某个键的长按事件。