UIimageview 在 uitableviewcell 中显示不止一次
Posted
技术标签:
【中文标题】UIimageview 在 uitableviewcell 中显示不止一次【英文标题】:UIimageview showing more than one time in uitableviewcell 【发布时间】:2016-05-18 09:15:24 【问题描述】:我的应用程序中有一个正在加载 xml 菜单的表。我在其中为每个单元格放置了一个 uiimageview 作为项目符号图像。但我的问题是第一个时间表显示正确(一个单元格中的一个图像)但是当我在菜单中进一步向下滚动时。它开始在一个单元格中显示图像 3 次。我将发布我的代码。
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *cellIdentifier = @"menuCell";
UITableViewCell *cell = (UITableViewCell *)[theTableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.backgroundColor = [UIColor clearColor];
cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-bold" size:18];
if ([[[rssOutputData objectAtIndex:indexPath.row]xmlid] isEqualToString:@"1"])
cell.textLabel.textColor = [UIColor redColor];
[cell setIndentationLevel:3];
[cell setIndentationWidth:10];
cellImage = [[UIImageView alloc]initWithFrame:CGRectMake(5,cell.frame.size.height/2+5, 15, 15)];
else if ([[[rssOutputData objectAtIndex:indexPath.row]xmlid] isEqualToString:@"2"])
cell.textLabel.textColor = [UIColor blueColor];
[cell setIndentationLevel:6];
[cell setIndentationWidth:10];
cellImage = [[UIImageView alloc]initWithFrame:CGRectMake(35,cell.frame.size.height/2+5, 13, 13)];
else if ([[[rssOutputData objectAtIndex:indexPath.row]xmlid] isEqualToString:@"3"])
cell.textLabel.textColor = [UIColor lightGrayColor];
[cell setIndentationLevel:9];
[cell setIndentationWidth:10];
cellImage = [[UIImageView alloc]initWithFrame:CGRectMake(65,cell.frame.size.height/2+5, 11, 11)];
cell.textLabel.text = [[rssOutputData objectAtIndex:indexPath.row]xmltitle];
cellImage.image=[UIImage imageNamed:@"arrow.png"];
[cell addSubview:cellImage];
return cell;
这就是实际发生的事情。
【问题讨论】:
只需在cell == nil
中添加imageView 并为图像视图设置tag
值。他们使用viewWithTab:
获取图像视图,然后设置图像视图
你试过我下面的答案了吗
是的,我确实试过了,它停止了箭头的重复,但现在图像没有显示它应该显示的位置我的意思是它的框架不正确,因为我想要我在 if ([[[rssOutputData objectAtIndex :indexPath.row]xmlid] isEqualToString:@"1"])
什么是xmlid
?以及为什么要设置不同的indentation level
和indentation width
?
【参考方案1】:
将cellImage = nil;
添加为方法的第一行,您的问题将得到解决。
更新:
尝试在单元格的contentview
中添加cellImage,而不是像单元格一样,
[cell.contentView addSubview: cellImage];
希望这会有所帮助:)
【讨论】:
你也在didselectrow
中设置图片吗?
同样的问题。谢谢
现在您应该创建customtabelview
类并从awakeFromNib
方法添加imageview
。不要从cellforrowatindexpath
添加。只需从此方法更改框架。它可能会解决您的问题【参考方案2】:
如果您在 Storyboard 中创建 tableView
,请仔细检查 storyboard
中的 cell identifier
。
而且您的细胞正在被重复使用,这就是您看到这种行为的原因。
不要在 Cell 中添加 Image,而是在 ContentView 中添加 Image。
[cell.contentView addSubview:MyImageView];
【讨论】:
tabelview 是在子视图中以编程方式创建的,我将其用作 self.view 的菜单 查看此链接***.com/questions/20118286/… ***.com/questions/28556172/…【参考方案3】:因为这条线
[cell addSubview:cellImage];
当您滚动时,会调用 cellForRowAtIndexPath,并将图像视图添加到您的表格视图单元格中。
要解决这个问题,有一些解决方案:
编写您的自定义单元格类,在 layoutSubViews 中初始化一次图像视图, 并且只更改 cellForRowAtIndexPath 中的图像内容。
在自定义单元格 xib 中创建图像视图并将出口添加到自定义 细胞类
【讨论】:
【参考方案4】:用此代码替换您的代码,
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *cellIdentifier = @"menuCell";
UITableViewCell *cell = (UITableViewCell *)[theTableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
UIImageView *cellImage = [[UIImageView alloc]initWithFrame:CGRectZero];
[cellImage setTag:100];
[cell.contentView addSubview:cellImage];
cell.backgroundColor = [UIColor clearColor];
cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-bold" size:18];
if ([[[rssOutputData objectAtIndex:indexPath.row]xmlid] isEqualToString:@"1"])
cell.textLabel.textColor = [UIColor redColor];
[cell setIndentationLevel:3];
[cell setIndentationWidth:10];
[cellImage setFrame:CGRectMake(5,cell.frame.size.height/2+5, 15, 15)];
else if ([[[rssOutputData objectAtIndex:indexPath.row]xmlid] isEqualToString:@"2"])
cell.textLabel.textColor = [UIColor blueColor];
[cell setIndentationLevel:6];
[cell setIndentationWidth:10];
[cellImage setFrame:CGRectMake(35,cell.frame.size.height/2+5, 13, 13)];
else if ([[[rssOutputData objectAtIndex:indexPath.row]xmlid] isEqualToString:@"3"])
cell.textLabel.textColor = [UIColor lightGrayColor];
[cell setIndentationLevel:9];
[cell setIndentationWidth:10];
[cellImage setFrame:CGRectMake(65,cell.frame.size.height/2+5, 11, 11)];
cell.textLabel.text = [[rssOutputData objectAtIndex:indexPath.row]xmltitle];
cellImage.image=[UIImage imageNamed:@"arrow.png"];
return cell;
【讨论】:
我什至通过评论这部分来尝试“UIImageView *cellImage = [[UIImageView alloc]initWithFrame:CGRectZero];”在单元格 == nill 但之后再次重复 n 全部 看到我每次都添加cellImage = [[UIImageView alloc]initWithFrame:CGRectMake(35,cell.frame.size.height/2+5, 13, 13)];
,这对你来说是个问题[cellImage setFrame:CGRectMake(65,cell.frame.size.height/2+5, 11, 11)];
每次您分配一个新的 UIImageView 并将其添加到单元格时,因此只会出现多个图像视图【参考方案5】:
请将此行添加到- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
cell.clipsToBounds=YES;
【讨论】:
【参考方案6】:分配一次imageView
并将tag
分配给imageView
并使用该标签显示图像和
使用:
[cell.contentView addSubview:MyImageView];
你的问题就解决了
【讨论】:
以上是关于UIimageview 在 uitableviewcell 中显示不止一次的主要内容,如果未能解决你的问题,请参考以下文章
使用UITableView自动在UITableView上滚动UIImageView
如何在 UITableView 的单元格中为 UIImageView 获取 touchesMoved?
在具有透明度的 UITableView 单元格中更新 UIImageView
如何在 UITableView 的两个部分之间插入 UIImageView?