【转】自定义UITableViewCell控件阻挡回调不到didSelectRowAtIndexPath的解决办法
原文网址:http://blog.talisk.cn/blog/2015/09/01/uitableview-didselectrowatindexpath-cannot-be-called-tips/
作为常用的控件,UITableView出现在了很多iOS App的各个地方,近期开发时遇到了一个问题,自定义Cell中嵌套了其他具有交互事件的控件,阻挡了Cell,导致无法回调didSelectRowAtIndexPath方法,最终得出解决办法。
一句话方案
将可能影响到Tap事件的控件的userInteractionEnabled属性设置为NO。
1 |
[self.scrollView setUserInteractionEnabled:NO]; |
问题引出
为了在一个Cell中展示多个item,并且为了方便做分页处理,用UIScrollView再合适不过了,由于需要,只能将这个UIScrollView设置为全尺寸(scrollView的size和cell的size相同),由于scrollView本身具备events,所以点击cell的时候,tableView的didSelectRowAtIndexPath无法响应。
像UIScrollView类似会引发这个问题的控件还有UITableView、UICollectionView、UITextField等等,当子视图的尺寸覆盖了整个cell,你就会发现无法回调didSelectRowAtIndexPath了。(当然如果子视图能不完全覆盖cell的话,点击未覆盖部分,还是可以正常回调的)。
原理
userInteractionEnabled是一个布尔类型值,当设置为YES的时候,控件可以接收交互事件,同一位置的交互事件,其父控件无法接收交互事件。正是由于iOS对交互事件如此的处理方式,才导致了Cell无法回调didSelectRowAtIndexPath的问题。当这个布尔值为NO时,交互事件由其父视图来处理,如果直到根视图都无法处理这个交互,则抛弃这个交互,除非某一视图能够处理这个交互。
后记
其实这还不是最好的解决方法,原因是,很多情况下,我们既需要父视图来响应交互事件,又希望子视图处理一些交互事件,可这个解决方案直接把子视图的交互一棒子打死了。例如,我们在Cell上加了一个ScrollView,我们希望当用户tap的时候,回调didSelectRowAtIndexPath,当swipe的时候,滚动scrollView。所以在这里加一个TODO:完美的解决方案『子视图与父视图分别处理不同交互』。
【转】自定义UITableViewCell控件阻挡回调不到didSelectRowAtIndexPath的解决办法的更多相关文章
- VS中Dev控件在工具箱里的不见的解决办法
出现问题:调整了VS中Dev控件后(以免生成程序每次都要在客户机上面注册dev),之前安装的DEV控件在vs工具箱中消失了,重装可以解决,但是太费时间了,检测dev自带的设置,找到了解决办法. 解决办 ...
- extjs4.0下的日期控件的星期显示为y的解决办法
没有修改的时候的问题: 今天第一次写博客,就记录一下以前extjs4.2下运用日期组件的星期显示问题,当时找了n久,可能是extjs4.2才出来没多久,没有多少人发现这个问题或者说很少有人将Extjs ...
- DevExpress控件显示前弹出到期时间解决办法
方法是,删除Properties下的license.licx文件,重新生成即可.
- VC6.0 MFC中WebBrowser控件禁止新窗口弹出的解决办法
http://blog.csdn.net/gnorth/article/details/7258293 分类: WebBrowser MFC 禁止新窗口2012-02-14 15:25 1787人阅读 ...
- Android自定义控件之自定义组合控件
前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...
- Android Studio自定义组合控件
在Android的开发中,为了能够服用代码,会把有一定共有特点的控件组合在一起定义成一个自定义组合控件. 本文就详细讲述这一过程.虽然这样的View的组合有一个粒度的问题.粒度太大了无法复用,粒度太小 ...
- Android自定义组合控件详细示例 (附完整源码)
在我们平时的Android开发中,有时候原生的控件无法满足我们的需求,或者经常用到几个控件组合在一起来使用.这个时候,我们就可以根据自己的需求创建自定义的控件了,一般通过继承View或其子类来实现. ...
- Android自定义控件之自定义组合控件(三)
前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...
- 安卓自定义组合控件--toolbar
最近在学习安卓APP的开发,用到了toolbar这个控件, 最开始使用时include layout这种方法,不过感觉封装性不好,就又改成了自定义组合控件的方式. 使用的工具为android stud ...
随机推荐
- Unity3D脚本中文系列教程(八)
◆ static var matrix : Matrix4x4 描述:设置用于渲染所有gizmos的矩阵. 类方法 ◆ Static function DrawCube(center:Vector3, ...
- 【PHP高效搜索专题(2)】sphinx&coreseek在PHP程序中的应用实例
PHP可以通过三种途径来调用sphinx 通过Sphinx官方提供的API接口(接口有Python,Java,Php三种版本) 通过安装SphinxSE,然后创建一个中介sphinxSE类型的表,再通 ...
- C语言中volatile关键字的作用
http://blog.csdn.net/tigerjibo/article/details/7427366#comments 一.前言 1.编译器优化介绍: 由 于内存访问速度远不及CPU处理速度, ...
- php动态滚动加载实例
内容涉及:php.分页.jquery.div+css 实例下载:http://download.csdn.net/detail/roro5119/7373905 index.php <? //数 ...
- Java中boolean型变量的默认值问题
1.首先分析Java中的三种不同变量的区别,如下表所示 概念 默认值 其他 类变量 也叫静态变量,是类中独立于方法之外的变量 用static 修饰 有默认初始值,系统自动初始化. 如boolean ...
- [POJ1753]Flip Game(开关问题,枚举)
题目链接:http://poj.org/problem?id=1753 和上一个题一样,将初始状态存成01矩阵,就可以用位运算优化了.黑色白色各来一遍 /* ━━━━━┒ギリギリ♂ eye! ┓┏┓┏ ...
- Mac系统在终端中查看CPU信息的命令
在mac os x的终端中以命令行的形式查看本机cpu信息: sysctl -n machdep.cpu.brand_string E.G. lis-mbp:Home jenkins$ sysctl ...
- Struts2注解配置之@Namespace(四)
今天开始学习@Namespace注解. 还是先看一段代码: package com.example.actions; import org.apache.struts2.convention.anno ...
- bzoj2790
观察这道题,d(a,b) 就是先变成最大公约数然后再变成b 设g[x]表示x的质因数数目,不难得到d(a,b)=g[a/gcd(a,b)]+g[b/gcd(a,b)] 因为g[xy]=g[x]+g[y ...
- ZJOI2006物流运输
唉,没想出来…… 注意到预处理的作用.还有CLJ大牛说的话:这么小的数据,想干什么都可以. SPFA预处理+DP 够经典 var f:..,..]of longint; a:..,..]of bool ...