近来用Tableview做了一个九宫格。过程中碰到了两个cell复用问题。
问题一:
在cell中为button添加addTarget点击事件时,出现后面的cell会重叠它前面cell的事件。代码如下:
static NSString *CellWithIdentifier = @"DiscoverHomeTableViewCell"; DiscoverHomeTableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:CellWithIdentifier forIndexPath:indexPath]; cell1.delegate = self; [cell1.btnMore addTarget:self action:@selector(btnMoreDisplay) forControlEvents:UIControlEventTouchUpInside]; cell1.labTitle.text = @"热门"; cell1.listExhibit = _homeVo.listExhibit; cell1.dType = D_TYPE_1; cell1.navigationController = self.navigationController; [cell1.tableView reloadData]; return cell1;
经过调试确实是复用了之前cell的事件。在此用协议代理可解决这一问题,用协议来进行处理点击事件。
#pragma mark DiscoverHomeTableViewCellDelegate - (void)ActionWithTap:(NSString *)type withData:(id)data{ if ([type isEqualToString:D_TYPE_1]) { [self btnMoreDisplay]; } }
问题二:
在UITableViewCell中,进行手写代码方式添加控件,这时在cell复用时,会出现重叠控件及控件中的内容。因为每一个cell都是重新添加的,前面的cell会覆盖在后面的cell上。于是强制对cell中添加的控件进行了清空,cell复用不变,只是新的cell加载前,都会对上一个cell的内容进行清空。代码如下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *CellIdentifer = @"DiscoverHomeInnerTableViewCell"; DiscoverHomeInnerTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer forIndexPath:indexPath]; //TODO 解决cell复用重叠问题 for (UIView *subview in [cell.contentView subviews]) { [subview removeFromSuperview]; } UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; //button相关设置 [cell.contentView addSubview:button]; UILabel *lab = [[UILabel alloc] init]; //lab相关设置 [cell.contentView addSubview:lab]; }
总结:
cell在复用时,如果手动添加控件,会有内容重叠现象出现。所在在运用时需要注意。
相关推荐
UITableView的SectionHeader的复用,UITableView的SectionHeader的复用
UITableView的使用方法及cell复用机制
UITableview处理键盘遮挡 没有实现控件复用导致的出现重复文本,以及部分bug。
对于ios7,ios8及以上来说,调整UITableView的cell的分割线位置已经是相当不便,因为UITableView内部使用了margin layout. 其实只需要如下这样子就可以实现分割线的控制。 代码如下: -(void)tableView:(UITableView...
reuseIdentifier顾名思义是一个复用标识符,是一个自定义的独一无二的字符串,用来唯一地标记某种重复样式的可复用UITableViewCell,系统是通过reuseIdentifier来确定已经创建了的指定样式的cell来进
一、介绍 iOS开发中,UITableView可能是平时我们打交道最多的UI控件之一,其重要性不言而喻。Android也是如此,Android中的ListView和...cell复用(Android中经常称为ListView的重用,其实重用复用都是一个意思,由
UITableView Unity引擎中,UGUI原生Scroll View并不支持复用,随元素增多会变得低效。 本示例非常简单,提供了复用机制,支持水平,垂直滑动。 基于 Unity 2017.1.0.f3 ,仅供参考。
tableView重用机制纯代码
一个简单的可以拖拽的UITableView
UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件。上面主要是一个个的UITableViewCell,可以让UITableViewCell响应一些点击事件,也可以在UITableViewCell中加入UITextField或者UITextView...
controller少了很多有关UITableViewDelegate以及UITableViewDatasource的相关代码,controller代码更加清晰。 基于以上特点adapter、cell、HeaderFooterView都可以最大限度的复用 Android(CHGAdapter) Java: Kot
controller少了很多有关UITableViewDelegate以及UITableViewDatasource的相关代码,controller代码更加清晰。 基于以上特点adapter、cell、HeaderFooterView都可以最大限度的复用 Android(CHGAdapter) Ja
半年ios 学习的菜鸟 制作滑动cell置顶(用了一个比较鸡贼的...更新了button复用的问题,但是上拉置顶的点击同步。暂时未做,看层级试图的话可以看出内容。如果要用置顶的view的话用tag的属性就可以了。 继续努力。
利用tableView旋转横向滚动的柱状图,可复用
源码KIPageView,...有时候我们也需要实现一些 Tab,如果 Tab 的项目比较多,也需要考虑复用的问题,所以决定重新写一个增强组件,作为其替代品,所以就产生了 KIPageView。 测试环境:Xcode 6.2,iOS 6.0 以上
目前RN中的ListView主要问题是复用,以及其他一些细节如索引视图、左滑删除、编辑等,要想在RN上自定义实现原生的这种效果尚有一定的问题,在必要时可以考虑使用原生的UITableView,数据从RN端传递 1、原生端编写...
ZHBWaterFallView 瀑布流样式,cell以队列形式复用,用法基本上与UITableView相同
UITableView UICollectionView 实现的二维滑动选择器, 可以上下左右四个方向滑动, 来选择不同的内容, 高度封装, 简单复用, 最新代码请到Github下载: [https://github.com/LQi2009/LQ4DirectionsScrollView]...
我们来具体的分析一下,首先考虑是复用的问题,当section要显示的时候,就会从复用池里面找到ID一样的section,然后找到了section,拿过来直接用,这里仅仅把显示的内容修改了一下,并没有判断section里面图标是展开...