UIButton点击无响应、动画不播放问题求助,附IBAction代码及storyboard截图
问题排查方向
一、点击无响应排查
- 先确认事件绑定正常:在
addNewCell方法首行加断点,点击按钮如果断点未触发,说明Storyboard中按钮的Touch Up Inside事件和该方法的绑定已断开,重新绑定即可。 - 检查上层视图交互属性:仅确认按钮自身的
isUserInteractionEnabled为true无效,需依次检查按钮所有父视图(包括cell的contentView、上层容器视图)的isUserInteractionEnabled属性是否为true。 - 检查视图层级异常:
- 按钮的frame是否超出父视图边界,父视图默认会拦截超出边界的子视图点击事件,可通过Xcode的
Debug View Hierarchy功能查看各视图frame是否合规。 - 是否存在其他视图盖在按钮上方拦截了点击事件,同样可以通过视图层级调试工具排查。
- 按钮的frame是否超出父视图边界,父视图默认会拦截超出边界的子视图点击事件,可通过Xcode的
- 检查手势冲突:如果按钮所在的父视图/cell添加了点击手势识别器,未设置手势代理允许同时响应控件点击的情况下,手势会优先拦截按钮的点击事件,可实现
UIGestureRecognizerDelegate的gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)方法返回true解决。
二、现有代码逻辑错误修复
你当前的CollectionView插入逻辑顺序错误,会导致插入位置异常甚至崩溃:你先基于插入前的数据源数量生成indexPath,再修改数据源,插入的行位置和新增的数据源位置不匹配。修正后的代码如下:
@IBAction func addNewCell(_ sender: Any) { // 先修改数据源 dataArray.append(Task(task: "", button: false)) // 再基于修改后的数据源生成正确的indexPath let indexPath = IndexPath(row: dataArray.count - 1, section: 0) collectionView.insertItems(at: [indexPath]) }
三、动画不播放排查
- 确认你触发动画的代码是否放在了正确的生命周期节点,如果是cell插入的动画,CollectionView默认的插入动画在代码逻辑修正后会正常播放,如果你自定义了按钮点击动画,需要确认动画代码是否在主线程执行,所有UI相关操作必须放在主线程。
- 如果是自定义cell内的按钮动画,检查cell复用逻辑中是否有动画相关属性未重置,导致动画被异常中断。
内容的提问来源于stack exchange,提问作者0Pixelle0
相关产品推荐
相关产品推荐

