UITableViewController静态单元格中UIView添加手势无响应问题求助
嘿,我遇过好几次静态表格里子视图手势失效的情况,大概率是下面这几个小问题,你一个个排查下:
可能的原因及解决办法
1. 用错了手势识别器类型
你现在创建的是UIGestureRecognizer基类,它本身是个抽象类,不会处理具体的点击动作。得换成专门的UITapGestureRecognizer:
// 替换原来的手势创建代码 let tap = UITapGestureRecognizer(target: self, action: #selector(hello)) myView.addGestureRecognizer(tap)
2. 开启UIView的用户交互权限
静态表格里的子视图有时候默认会关闭用户交互,你需要手动打开:
// 可以在添加手势前设置,比如viewDidLoad里 myView.isUserInteractionEnabled = true
3. 确认手势添加的时机
如果你的手势是在viewDidLoad之前添加的(比如直接写在类的属性初始化里),那时候myView可能还没完成加载,手势根本没加上去。把添加手势的代码移到viewDidLoad里:
override func viewDidLoad() { super.viewDidLoad() let tap = UITapGestureRecognizer(target: self, action: #selector(hello)) myView.isUserInteractionEnabled = true myView.addGestureRecognizer(tap) }
4. 排查单元格的交互干扰
有时候单元格的选中状态会干扰子视图的手势,你可以试试把单元格的selectionStyle设为.none,或者确认单元格本身的isUserInteractionEnabled是开启的:
// 在静态单元格的配置逻辑里设置 cell.selectionStyle = .none
5. 验证手势和视图的有效性
如果上面的方法都没用,你可以在添加手势的地方加个打印,确认myView和手势的target都不是nil:
print("myView是否存在:\(myView != nil)") print("手势target:\(tap.target ?? "nil")")
按照这个顺序排查,基本就能解决问题啦!
内容的提问来源于stack exchange,提问作者Myat Min Soe
相关产品推荐
相关产品推荐

