有关UITableView--cell复用问题

近来用Tableview做了一个九宫格。过程中碰到了两个cell复用问题。

问题一:

在cell中为button添加addTarget点击事件时,出现后面的cell会重叠它前面cell的事件。代码如下:

C代码  

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的事件。在此用协议代理可解决这一问题,用协议来进行处理点击事件。

C代码  

#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的内容进行清空。代码如下:

C代码  

- (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];
时间: 2024-12-12 15:36:11

有关UITableView--cell复用问题的相关文章

tableview 点击cell改变cell中的label.text的字体颜色,cell复用出现问题的解决方案2

关于Cell的复用问题,上次已经说了一种,但似乎那种方法不是最好的,所以说,今天下午根据别人提示,想到了此方法.还是老样子,可能不是最好的,但是实现了功能,至少比上次的要好一些. 题目要求:定义固定数据源,然后让tableview的行上各自显示第几行,然后点击选中的时候,字体颜色会变为红色,取消选中的时候字体变为黑色.然后最后的时候要输出选中的结果 解题思路:首先实现tableView的几个协议,然后定义一个模型,在模型中定义一个标识,然后通过点中的时候标识,然后判断标识解决Cell的复用. M

collectionView 防止cell复用的方法

collectionView 防止cell复用的方法 一: //在创建collectionView的时候注册cell(一个分区) UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath]; for (UIView *view in cell.contentView.subviews) { [view removeFro

Why does uitableview cell remain highlighted?

What would cause a tableview cell to remain highlighted after being touched? I click the cell and can see it stays highlighted as a detail view is pushed. Once the detail view is popped, the cell is still highlighted. ####### In your didSelectRowAtIn

IOS 8 UITableView cell lines不能靠左解决方法

ios7中用以下方法可使UITableView cell lines靠左 self.tableview.separatorInset = UIEdgeInsetsZero; 但在ios8中该办法已失灵啦 经过翻阅ios8文档发现用以下两种办法即可解决该问题 方法一:- (void) viewDidLoad { [...] self.tableView.separatorInset = UIEdgeInsetsZero; if ([self.tableView respondsToSelector

tableView   cell 复用 第二种

cell 第二种方法 (1)static NSString * ideng = @"reuse"; cell 第二种方法 (2)        注册复用cell (cell 的类型和标识符) (可以同时注册多个cell , 方法相同 , 一定要保证标识符是不一样的)       注册到了tableView的复用池        [self.tableView registerClass:[TableViewCell class] forCellReuseIdentifier:ideng

UITableView Cell 弹簧动画效果

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { cell.transform = CGAffineTransformMakeTranslation(0, 40); [UIView animateWithDuration:0.8 animations:^{ cell.transform = C

cell复用,状态改变

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"LeftTableViewCell"; LeftTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifie

UITableview cell 的多选

利用NSMutableDictionary  key值 来改变cell的状态 -(void)createUI{ table = [[UITableView alloc]initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height/2.0) style:UITableViewStylePlain];    [table setSep

IOS第八天(7:UITableViewController新浪微博,cell 复用的简单写法优化和cell高度从模型中获取)

*********** #import "HMViewController.h" #import "HMStatus.h" #import "HMStatusCell.h" #import "HMStatusFrame.h" @interface HMViewController () /** 保存statusFrame模型的数组 */ @property (nonatomic, strong) NSArray *status

UITableView cell中label自动换行和自定义label自动换行

换行的前提必须是有足够的高度 才能换 否则不显示超出部分 所以,在设置label换行的时候 要考虑cell的高度,cell的高度也要变化,废话不多说,来段代码: cell.label.text=[dict objectForKey:@"info"];     cell.label.numberOfLines=0; //可多行显示     cell.label.lineBreakMode=NSLineBreakByWordWrapping;//拆行 设置label的高度 [self ch