You need to enable JavaScript to run this app. 如何让自定义UISearchBar内的suggestionTableView响应点击触摸事件
优惠活动
大模型
产品
解决方案
定价
更多

如何让自定义UISearchBar内的suggestionTableView响应点击触摸事件

问题解决方法

根因说明

你将suggestionTableView的顶部约束对齐SuggestionSearchBar的底部,导致整个下拉列表完全处于SuggestionSearchBar自身的bounds范围之外。iOS默认的事件传递机制会忽略父视图bounds外的子视图触摸事件,所以点击下拉列表时事件会直接穿透到下层视图,无法被tableView接收。

修复代码

只需要在SuggestionSearchBar类中重写hitTest方法即可,实现逻辑如下:

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    // 过滤掉当前视图无响应能力的情况
    guard !isHidden, isUserInteractionEnabled, alpha > 0.01 else {
        return nil
    }
    
    // 将点击坐标转换为tableView内部的坐标
    let tableViewConvertPoint = convert(point, to: suggestionTableView)
    // 判断点击是否落在tableView的可见区域内
    if suggestionTableView.bounds.contains(tableViewConvertPoint), !suggestionTableView.isHidden {
        // 交给tableView处理事件
        return suggestionTableView.hitTest(tableViewConvertPoint, with: event)
    }
    
    // 其余场景走默认事件传递逻辑
    return super.hitTest(point, with: event)
}

添加上述代码后,点击下拉列表的事件就会被正确传递给suggestionTableView,didSelectRowAt等代理方法就能正常触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 12:06:01