好奇怪的问题!
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";