Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UITableView单元格重画导致文本重叠_Iphone_Ios_Uitableview - Fatal编程技术网

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为您提供的未使用的单元格(滚动时不在视图中)。如果你提供一个不同的名称,那么每次你创建一个新的单元格时,如果你的表包含很多数据,它就会耗尽内存。是的,我同意,我可能会在我的情况下使用相同的标识符,但伙计们,你不关注我的问题。问题是为什么单元格没有完全重画?艾尔