UITableView 中的自定义单元格使图像在滚动时重叠
Posted
技术标签:
【中文标题】UITableView 中的自定义单元格使图像在滚动时重叠【英文标题】:Custom cell in UITableView make images overlap on scroll 【发布时间】:2014-06-18 10:13:27 【问题描述】:我创建了自定义表格视图单元格,上面有 2 个图像(最初设置为隐藏)。 当我渲染每个单元格时,我会检查一些状态并设置图像可见/隐藏属性。 当我打开该表格时,当我滚动到底部并返回顶部时,它看起来很好,前 2-3 个单元格都显示了两个图像。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"myCustomCell";
OrderCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil)
[tableView registerNib:[UINib nibWithNibName:@"myCustomCell" bundle:nil] forCellReuseIdentifier:CellIdentifier];
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
...
cell.Title.text = @"some value";
...
if(...)
cell.image1.hidden = YES;
cell.image2.hidden = NO;
else
cell.image1.hidden = NO;
cell.image2.hidden = YES;
...
为什么会发生这种情况?
问题可能出在CellIdentifier
上。
更新
第一次尝试:
OrderCustomCell *cell;
if(cell == nil)
[tableView registerNib:[UINib nibWithNibName:@"myCustomCell" bundle:nil] forCellReuseIdentifier:CellIdentifier];
cell = [tableView dequeueReusableCellWithIdentifier:nil];
第二次尝试:
OrderCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil)
[tableView registerNib:[UINib nibWithNibName:@"myCustomCell" bundle:nil] forCellReuseIdentifier:nil];
cell = [tableView dequeueReusableCellWithIdentifier:nil];
【问题讨论】:
使用这个对你来说很好用 ***.com/questions/22862938/… 如果我将 Identifier 设置为 nil 应用程序崩溃。如果添加for(UIView *view in...
则没有任何反应。
如果你不是我的,你能更新一下吗?,plz
只改变这个 OrderCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
再次崩溃。 must pass a valid reuse identifier to UITableView
【参考方案1】:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"myCustomCell";
OrderCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
if(cell == nil)
[tableView registerNib:[UINib nibWithNibName:@"myCustomCell" bundle:nil] forCellReuseIdentifier:CellIdentifier];
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
...
cell.Title.text = @"some value";
...
if(...)
cell.image1.hidden = YES;
cell.image2.hidden = NO;
else
cell.image1.hidden = NO;
cell.image2.hidden = YES;
...
【讨论】:
滚动后仍然相同的图像重叠。【参考方案2】:使用它作为标识符。
NSString *identifier =[NSString stringWithFormat:@"%d",indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (!cell)
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
我希望这能解决您的问题。我有同样的问题,现在解决了。
【讨论】:
崩溃不可能是因为上面的代码。崩溃还有其他原因。请更新原因。这对我来说很好。 您确定您的崩溃不是因为自定义单元格“OrderCustomCell”,因为在 NibWithNibName 中您使用的是“myCustomCell”。请仔细检查这件事。 我的自定义单元格 nib 名称是myCustomCell
我也在 nib myCustomCell
中使用相同的标识符作为标识符我尝试更改它。【参考方案3】:
你可以使用,它对我有用。
OrderCustomCell * orderCustomCell = (OrderCustomCell *)[tableView dequeueReusableCellWithIdentifier:nil];
if (orderCustomCell==nil)
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"OrderCustomCell" owner:self options:nil];
orderCustomCell = [nib objectAtIndex:0];
【讨论】:
从不重叠,我敢肯定 :))以上是关于UITableView 中的自定义单元格使图像在滚动时重叠的主要内容,如果未能解决你的问题,请参考以下文章
使用大型数据库时,如何避免 UITableView 中的自定义单元格加载时间过长
UITableView - 自定义 UITableViewCell 中的自定义 selectedBackgroundView 选择时隐藏单元格分隔符