You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让UIView的指定部分可点击,仅响应特定子控件的点击事件

实现方案

你可以根据后续需求灵活选择以下两种实现方式:

方案1:直接给Label2添加点击手势(最简实现,适合固定仅Label2响应的场景)

UILabel默认关闭用户交互,所以需要先手动开启交互,再绑定手势即可:

  • 开启Label2的用户交互权限:label2.isUserInteractionEnabled = true
  • 给Label2添加点击手势识别器,绑定触发逻辑

代码示例:

// 在自定义View的初始化或布局完成的生命周期中添加
let label2Tap = UITapGestureRecognizer(target: self, action: #selector(onLabel2Clicked))
label2.addGestureRecognizer(label2Tap)
label2.isUserInteractionEnabled = true

// 点击触发的回调方法
@objc private func onLabel2Clicked() {
    // 这里写你的点击处理逻辑
}

方案2:重写自定义View的hitTest方法(灵活可控,适合后续需要调整响应区域的场景)

通过重写视图的点击事件判定方法,统一控制整个自定义View的响应区域,点击落在Label2之外的范围直接放弃响应:

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    // 将当前点击坐标转换为Label2坐标系下的坐标
    let convertPoint = convert(point, to: label2)
    // 判定点击是否落在Label2范围内
    if label2.bounds.contains(convertPoint) {
        return super.hitTest(point, with: event)
    }
    // 其余区域不响应交互
    return nil
}

效果参考布局

布局示意图

注意事项

  • 两种方案都不需要修改Image、Label1以及StackView的交互属性,非指定区域的点击会自动被忽略
  • 如果自定义View本身还有其他全局交互逻辑,优先选方案2做统一管控

内容的提问来源于stack exchange,提问作者Allan Snicker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 12:36:04