UITapGestureRecognizer没有添加到视图中时,UIButtonCustomControl都将接收.touchUpInside事件.然而,当将UITapGestureRecognizer添加到视图中时,只有UIButton可以接收.touchUpInside事件.在此场景中,如何将定制UIControl配置为像UIButton一样响应touch 事件?

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        let uiButton = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        uiButton.backgroundColor = .red
        uiButton.addTarget(self, action: #selector(onUIButtonClick), for: .touchUpInside)
        view.addSubview(uiButton)
        
        let customButton = CustomControl(frame: CGRect(x: 200, y: 100, width: 100, height: 100))
        customButton.backgroundColor = .blue
        customButton.addTarget(self, action: #selector(onCustomControlClick), for: .touchUpInside)
        view.addSubview(customButton)
        
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(onTap))
        view.addGestureRecognizer(tapGesture)
    }
    
    @objc func onTap() {
        debugPrint("onTap")
    }
    
    @objc func onUIButtonClick() {
        debugPrint("onUIButtonClick")
    }
    
    @objc func onCustomControlClick() {
        debugPrint("onCustomControlClick")
    }
}

class CustomControl: UIControl {
}

推荐答案

代表方法gestureRecognizerShouldBegin(_:)询问手势是否应该读取(并中断)touch .在您的 case 中:

class CustomControl: UIControl {
    override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return !(gestureRecognizer is UITapGestureRecognizer)
    }
}

如果您不希望其他手势中断,则可以扩展条件.

Ios相关问答推荐

StackView UIKit间距似乎非常小的编程式编程

与iPadOS中带有扣件的模式相似的组件是什么?

使用 Xamarin 将 dext Bundle 到 iOS .ipa 中

Swift UI中如何为Text提供内部填充

错误地提取问题的答案选项

Flutter动画放大图

UIControl 子类 - 按下时显示 UIMenu

PropertyWrapper 不存在的 Codable 属性的默认值

渲染的海边重定向在物理 iOS 设备上不起作用

无法为 Flutter 项目构建 ipa [CocoaPods 找不到 pod "GoogleAppMeasurement" 的兼容版本:]

使用 RxDatasources 作为数据源时如何填充自定义页眉/页脚视图

-1103 错误域=NSURLErrorDomain 代码=-1103资源超过最大大小iOS 13

在 iPhone 应用程序中使用 SSL - 出口合规性

针对 Xcode 中的 iPad 选项

命令 /Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 失败,退出代码为 1

为所有 UIImageViews 添加圆角

如何立即移动 CALayer(无动画)

在两个或多个 iPhone 应用程序之间共享数据

AFNetworking 发布请求

在自动布局中居中子视图的 X 会引发未准备好约束