当前位置: 代码迷 >> Iphone >> ! uitablecell中的uiimageview ,有的响应gesture recognizer,有的不响应
  详细解决方案

! uitablecell中的uiimageview ,有的响应gesture recognizer,有的不响应

热度:58   发布时间:2016-04-25 05:48:32.0
好奇怪的问题! uitablecell中的uiimageview ,有的响应gesture recognizer,有的不响应
好奇怪的问题!
uitablecell中的uiimageview,添加了gesture recognizer,但是,再simulator里边,有的imageview响应,有的不响应。请问使怎么回事?
代码如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"cell";
    
    if([indexPath section]==0){
        return [tableView dequeueReusableCellWithIdentifier:@"loadcell" forIndexPath:indexPath];
        
    }
    
    else if([indexPath row]<self.data.count){
        
        tablecellCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
        cell.userInteractionEnabled = YES;
        [cell addGestureRecognizer:self.changeAlbumTap];
        
        
        UILabel * label = (UILabel *)[cell.contentView viewWithTag:1];
        [label setText:[self.data objectAtIndex:[indexPath row]]];
        
        
        UIImageView * imageView = (UIImageView*)[cell.contentView viewWithTag:2];
        [imageView setContentMode:UIViewContentModeScaleAspectFit];
        [imageView setBackgroundColor:[UIColor grayColor]];
//        [imageView setImageWithURL:[NSURL URLWithString:@"http://caipiao.tao3c.com/pages/index/imagesNew/element.png"]
//                  placeholderImage:[UIImage imageNamed:@"Default.png"]
//         ];
        
        
        
        UIImageView * biv = [[UIImageView alloc]init];
        CGRect  fbiv = CGRectMake(20, label.frame.origin.y+50, 60, 60);
        biv.frame = fbiv;
        [biv setImage:[UIImage imageNamed:@"Default.png"]];
        biv.userInteractionEnabled = YES;
        biv.multipleTouchEnabled = YES;
        [biv setTag:[indexPath row]];
        [biv addGestureRecognizer:self.refreshAlbumTap];
        [cell addSubview:biv];
        return cell;
    } else {
        return [tableView dequeueReusableCellWithIdentifier:@"loadcell" forIndexPath:indexPath];
    }
}

------解决方案--------------------
        [cell addGestureRecognizer:self.changeAlbumTap];
         
         
        UILabel * label = (UILabel *)[cell.contentView viewWithTag:1];

在这两句中间加上一句
[[cell subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
------解决方案--------------------
你生成cell的逻辑有问题
应该先执行
tablecellCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
这一句,然后在判断cell是不是存在
if (!cell)
{
   //开始创建cell
}

你上面那种写法每次都会创建一个新的cell,就算手势不出问题,很快内存也会爆满
------解决方案--------------------
你没弄明白,你的代码
tablecellCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
这一句第一次运行的时候没问题,因为没有可以重用的cell,这时候的cell是空的.
滚动之后再执行到这一句时就不是空的了,这个cell是重用出来的,里面已经包含了你添加的那些label,imageview什么的
接下的代码你又是UILabel * label = (UILabel *)[cell.contentView viewWithTag:1]; 生成新的label,image view添又加到cell上,你每滚动一次就重复一份,不信你可以试试
------解决方案--------------------
你程序刚运行起来的时候,不要滚动表格试一下手势,如果这时候手势是正常的,滚动之后手势就不正常,那基本上就是cell重用的问题了
------解决方案--------------------
 [biv addGestureRecognizer:self.refreshAlbumTap];


你这个初始化应该写在,- (void)viewDidLoad 里之类的吧,你试着给每个cell创建一个UITapGestureRecognizer应该就可以了

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"cell";
  相关解决方案