删除多个单元格后,uitableview 添加了一些行
Posted
技术标签:
【中文标题】删除多个单元格后,uitableview 添加了一些行【英文标题】:After deleting more than one cell uitableview adds some rows 【发布时间】:2013-05-07 12:53:05 【问题描述】:我正在使用“滑动删除”,如果我想删除一个序列中的多个单元格,uitableview 中的一些单元格会加倍或出现一些已删除的单元格。因为我不能发布任何图片,所以我将描述桌子的行为:
-
删除单元格前的表:User1、User2、User3、User4、User5、添加新用户。
删除 User1 和 User5 后的表:User2、User3、User4、Add new user、Add new user(但不可选择)。
删除 User3 后的表:User4、User2、Add new user、User5(可选择)、Add new user(不可选择)。
我删除单元格的方法如下:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
if (editingStyle == UITableViewCellEditingStyleDelete)
[self.usersTable beginUpdates];
UITableViewCell *cell = (UITableViewCell *)[self.usersTable cellForRowAtIndexPath:indexPath];
NSString *userNameToDelete = cell.textLabel.text;
// Data source
[self.appDict removeObjectForKey:userNameToDelete];
self.arrayOfUserNames = [[NSMutableArray alloc] initWithArray:[self.appDict allKeys]];
[self.appDict writeToFile:self.pathOfAppFile atomically:YES];
// Deleting cell
[self.usersTable deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.usersTable endUpdates];
支持编辑的方法:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
if (indexPath.row == [self.arrayOfUserNames count])
return NO;
else
return YES;
部分行数:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [self.arrayOfUserNames count] + 1;
我已经尝试过 [self.usersTable reload] 但一切都保持不变。我也尝试在 numberOfRowsInSection: 中更改表格的大小:但这也无济于事。任何想法我做错了什么?
【问题讨论】:
【参考方案1】:你还没有实现
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
if (editingStyle == UITableViewCellEditingStyleDelete)
//delete your user record
?
如果不是,Tableview 将删除单元格,但基础数据不会被修改,并且会导致这种奇怪的行为。
编辑:
尝试使用:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
if (editingStyle == UITableViewCellEditingStyleDelete)
NSString *userNameToDelete = [[self arrayOfUserNames] objectAtIndex:indexPath.row];
// Data source
[self.appDict removeObjectForKey:userNameToDelete];
self.arrayOfUserNames = [[NSMutableArray alloc] initWithArray:[self.appDict allKeys]];
[self.appDict writeToFile:self.pathOfAppFile atomically:YES];
[tableView reloadData];
简单解释一下:
什么时候
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
被调用,tablecell 已从 tableview 中删除,因此您不必处理此问题。如果你这样做,你将删除下一个单元格。
【讨论】:
我在该方法中将 self.usersTable 更改为 tableView,但行为保持不变。你有这个想法吗? 抱歉。看来我有点失明;) 我假设 [tableview reloadData] 无法正常工作,因为表格或视图本身认为在删除序列中的多个单元格后不需要重绘自己。根据您的建议,我将 commitEditingStyle:forRowAtIndexPath: 中的 self.userstable 更改为 tableview (其他所有内容保持不变),现在它可以工作了。以上是关于删除多个单元格后,uitableview 添加了一些行的主要内容,如果未能解决你的问题,请参考以下文章
自定义 UITableView 单元格 Nib 文件仅在选择单元格后显示?
UITableView 中的自定义绘图在 5 个单元格后失败
点击单元格后不同的 UITableViewCell 子视图布局