您好我有这个问题,如果我在我的uitableview中添加超过13个项目,那么项目将重复
这是我的
代码添加:
[categoryList insertObject:inputcategory atIndex:0];
NSIndexPath *indexpath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtindexPaths@[indexpath] withRowAnimation:UITableViewRowAnimationAutomatic];
CellForRow:
if (cell == nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.textlabel.text = [categoryList objectAtIndex:indexPath.row];
}
NumberofRows
return [categoryList count];
前12个项目没问题但是之后它在我的uitableview中再次在我的NSMutableArray中添加了相同的最后一个对象,当我重新加载它时,它只记录了12个项目。
答案 0 :(得分:4)
在cellForRowAtIndexPath:
方法更改
if (cell == nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.textlabel.text = [categoryList objectAtIndex:indexPath.row];
}
到
if (cell == nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
cell.textlabel.text = [categoryList objectAtIndex:indexPath.row];
如果您在if (cell == nil)
中设置文字,则在重新使用该单元格时不会更新。重用单元格时不会为零。
答案 1 :(得分:1)
Akhilrajtr的答案是正确的,但这是旧的做法。在2014年,iOS 6+应该使用UITableView方法
- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier
或
- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier
和
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath
在cellForRowAtIndexPath:
中获取单元格变得更加简单......
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
"标识符"是用于标识要重用的单元格的唯一字符串,就像旧方法一样。
从Apple的文档中,"如果现有单元格可用,则此方法会出现,或者根据先前注册的类或nib文件创建新单元格。#34;您不再需要使用initWithStyle
,如果您认为这样做,则考虑将UITableViewCell子类化,以更精确地控制单元格的外观。
不再需要检查单元格是否为零。如果您的单元格是普通的UITableViewCell,或者配置您的子类化单元格(当然应该已经准备好使用prepareForReuse:
方法重新使用),请继续设置标签。
答案 2 :(得分:0)
Apple提及此in their documentation on UITableViews.
的效果它应该是关于重用细胞。因此,如果cell != nil
你无法解决此问题:
if (cell == nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.textlabel.text = [categoryList objectAtIndex:indexPath.row];
}
重复使用细胞。 - 对象分配具有性能成本,特别是如果分配必须在短时间内重复发生 - 例如,当用户滚动表视图时。如果重复使用单元格而不是分配新单元格,则可以大大提高表格视图的性能。