Iphone UITableView单元格重画导致文本重叠
我在Iphone UITableView单元格重画导致文本重叠,iphone,ios,uitableview,Iphone,Ios,Uitableview,我在cellforrowatinexpath中执行以下操作 NSString *cellIdentifier = @"Cell"; LibraryCell *cell = (LibraryCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell != nil) { [cellIdentifier release]; [self setItems:cell forRowAtIndexP
cellforrowatinexpath中执行以下操作
NSString *cellIdentifier = @"Cell";
LibraryCell *cell = (LibraryCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell != nil) {
[cellIdentifier release];
[self setItems:cell forRowAtIndexPath:indexPath];
return cell;
}
cell = [[[LibraryCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier] autorelease];
[self setItems:cell forRowAtIndexPath:indexPath];
return cell;
[self-setItems:cell-forRowAtIndexPath:indexath]代码>仅更改相应单元格内某些UILabel的值
因此,现在当我编辑UITableView并删除第一行时,UILabel的值没有完全重新绘制,即旧值保留,新值与旧值重叠绘制。
为什么会发生这种情况以及如何解决 首先,您的手机识别码应该使用相同的名称
请参阅UITableView类参考
:
如果无法获得可重复使用的单元格,请创建它。之后更新你的手机。
代码应该是这样的
LibraryCell *cell = (LibraryCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
// create a new cell
...
}
// Update cell
...
return cell;
首先,您应该使用相同的名称作为您的cellIdentifier
请参阅UITableView类参考
:
如果无法获得可重复使用的单元格,请创建它。之后更新你的手机。
代码应该是这样的
LibraryCell *cell = (LibraryCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
// create a new cell
...
}
// Update cell
...
return cell;
我猜你误解了细胞标识符的概念。
它仅用于区分您可能称之为“戳记”的内容,用于在屏幕上打印单元格的外观。因此,您很可能只需要一个单元格标识符
它帮助系统缓存“stamps”的实例。调用cellforrowatinexpath
时,只需选择要使用的戳记类型。如果您之前创建了一个正确的实例(即,当使用单元格标识符字符串请求时,您得到了一个实例),您只需要更改标签文本等,然后返回它。在现实生活中,这可能被比作一个日期戳,你可以通过转动邮票上的小旋钮来改变日期。这是通过将新文本指定给单元格中包含的标签来完成的
相反,您似乎通过连接字符串值为模型中的每个索引创建了一个戳记,有效地创建了与模型中的行数量相同的实例。除了不必要之外,它还可能导致内存压力和口吃,因为它抵消了UITableView的各种优化
我建议你仔细阅读苹果的文档,或者看看iTunes U()
关于iOS开发的斯坦福课程。这里解释得非常清楚。我想你误解了单元格标识符的概念。
它仅用于区分您可能称之为“戳记”的内容,用于在屏幕上打印单元格的外观。因此,您很可能只需要一个单元格标识符
它帮助系统缓存“stamps”的实例。调用cellforrowatinexpath
时,只需选择要使用的戳记类型。如果您之前创建了一个正确的实例(即,当使用单元格标识符字符串请求时,您得到了一个实例),您只需要更改标签文本等,然后返回它。在现实生活中,这可能被比作一个日期戳,你可以通过转动邮票上的小旋钮来改变日期。这是通过将新文本指定给单元格中包含的标签来完成的
相反,您似乎通过连接字符串值为模型中的每个索引创建了一个戳记,有效地创建了与模型中的行数量相同的实例。除了不必要之外,它还可能导致内存压力和口吃,因为它抵消了UITableView的各种优化
我建议你仔细阅读苹果的文档,或者看看iTunes U()
关于iOS开发的斯坦福课程。这在那里解释得很清楚。事实上我明白了!问题来自setItems:forIndextPath
方法。
它正在本地创建UILabel并发布它。所以每次都是在最后一段文字上画的。使用UILable实例变量解决了这个问题
另外,代码最初不是我写的,我只是在修改:)事实上我已经明白了!问题来自setItems:forIndextPath
方法。
它正在本地创建UILabel并发布它。所以每次都是在最后一段文字上画的。使用UILable实例变量解决了这个问题
另外,代码最初不是我写的,我只是在修复它:)如果我得到了可重用单元,我根本不会创建它!如果可重用标识符返回nil,将创建一个新单元。还有,为什么我应该对所有单元格使用相同的标识符?到目前为止,我在文档中没有看到这方面的内容。丹尼尔已经解释过了,看一看。当您调用dequeueReusableCellWithIdentifier时,系统将发现cellIdentifier为您提供的未使用的单元格(滚动时不在视图中)。如果你提供一个不同的名称,那么每次你创建一个新的单元格时,如果你的表包含很多数据,它就会耗尽内存。是的,我同意,我可能会在我的情况下使用相同的标识符,但伙计们,你不关注我的问题。问题是为什么单元格没有完全重画?虽然我已经更改了代码,使所有单元格都使用相同的标识符,但我得到了文本重叠的单元格。你能发布更新后的代码吗?还有你的设置项:ForIndexPathAnd请也包括LibraryCell。如果我得到了可重用的单元格,我根本不会创建它!如果可重用标识符返回nil,将创建一个新单元。还有,为什么我应该对所有单元格使用相同的标识符?到目前为止,我在文档中没有看到这方面的内容。丹尼尔已经解释过了,看一看。当您调用dequeueReusableCellWithIdentifier时,系统将发现cellIdentifier为您提供的未使用的单元格(滚动时不在视图中)。如果你提供一个不同的名称,那么每次你创建一个新的单元格时,如果你的表包含很多数据,它就会耗尽内存。是的,我同意,我可能会在我的情况下使用相同的标识符,但伙计们,你不关注我的问题。问题是为什么单元格没有完全重画?艾尔