UIButton无响应问题详细记录
来源:互联网 发布:德勤财务咨询 知乎 编辑:程序博客网 时间:2024/05/19 17:10
问题描述
自定义了一个AlertView控件,更新数据过程中,显示取消按钮,数据更新完成以后,移除取消按钮,显示完成按钮,在更新数据时,点击取消按钮,在数据更新完成时,按钮才响应。我们的需求就是用户可以取消,但是按钮无响应,导致这个功能无法实现。
思考过程
首先想到的是UI线程被阻塞了,但是我做了错误的测试,只是将显示alertview的代码放到了主线程,这并不是测试主线程的代码,起不到效果;
其次,我想到取消按钮的action是不是没添加成功,检查发现添加成功了;
然后,我尝试使用其他的alertview控件去实现同样的展示效果,但是取消按钮在更新过程中依然无法响应。
再然后,我写了一段测试代码,在子线程中sleep 3s模拟更新过程,之后在主线程更新按钮状态,此时,我发现取消按钮能正常响应。此时问题定位已经定位了80%。我继续查看更新数据的方法,一步步的往深处看执行的方法,发现有一处代码执行时间特别长,但是确在主线程中执行,此刻我恍然大悟,原来更新操作阻塞了主线程,才导致了UIButton无法响应啊!
问题原因
主线程中有耗时操作,block嵌套block,方法体是在子线程中执行,但是block中的代码却是在主线程中;这个问题不容易发现。
block1 ^{ 子线程{ 耗时任务; 主线程{ 耗时任务; } }}
问题衍生
遇到按钮无法响应的问题,首先想想是否主线程被阻塞;
解决方法
将主线程中执行的耗时任务放到子线程中;
block1 ^{ 子线程{ 耗时任务; 主线程{ 子线程{ 耗时任务; } } }}
总结
虽然主线程被阻塞了,但是UIImageView的rotateAnimation依然能动画,说明BaseAnimation的执行是在子线程中执行的。
0 0
- UIButton无响应问题详细记录
- Oracle 存储过程部署时sqlplus无响应问题记录
- OnMouseWheel无响应问题
- onKeyDown无响应问题
- yum无响应问题
- UIButton无法响应点击事件问题
- UIButton无法响应点击事件问题
- UITapGestureRecognizer 与 UIButton 按钮 无响应的bug
- Ajax 长时间无响应问题
- 记录下关于Synergy 客户端鼠标无响应问题的解决办法
- UIButton不能响应或者在模拟器可以响应真机不能响应的诡异问题
- IOS开发之关于UIButton点击没有响应问题
- IOS开发之关于UIButton点击没有响应问题
- uibutton响应传参数
- uibutton响应传参数
- UIButton 双击事件响应
- UIButton增大响应区域
- UIButton增加响应区域
- java与matlab混合编程
- MySQL:check the manual that corresponds to your MySQL server version for the right syntax
- 推荐一款适合程序猿使用的字体
- Android如何自定义视图属性总结
- ImageView的属性android:scaleType作用
- UIButton无响应问题详细记录
- iOS开发--毛玻璃效果,图片模糊效果
- 飞机大战开发01之添加主逻辑层,显示背景的移动
- 【OpenGL编程指南】之视图和模型变换
- [XML]sax中DefaultHander解析xml过程和先后顺序
- 2-5-2 对象作为数据成员
- 常用知识总结——模板Template
- 最近学习的感悟
- 深度学习介绍(六)趣闻