The Three20是一个很棒的图书馆。它使表格的工作变得非常容易。但是我注意到的一个差距是用动画删除行。我花了很多时间尝试这样做,这就是我正在做的事情:
// get current index patch
UITableView* table = [super tableView];
NSIndexPath *indexPath = [table indexPathForSelectedRow];
//delete row in data source
TTListDataSource * source = (TTListDataSource *)self.dataSource;
[source.items removeObjectAtIndex:indexPath.row];
// delete row from the table, with animation
[table deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
此代码运行后出现错误:[NSCFArray objectAtIndex:]:index(0)超出bounds(0)
我正在使用从TTTableViewController继承的类。我没有实现DataSourceDelegate或TableViewDelegate,因为我尽可能使用Three20。所以,这就是我创建数据源的方式:
for(NSDictionary *album in (NSArray *)albums){
TTTableRightImageItem *item = [TTTableRightImageItem itemWithText:@"name"
imageURL:@"image url"
defaultImage:nil
imageStyle:TTSTYLE(rounded)
URL:@"url of selector where I actually catch the tap on a row"];
[tableItems addObject:item];
}
self.dataSource = [TTListDataSource dataSourceWithItems:tableItems];
我读过这篇文章(article),但没有帮助:(
所以,我知道这对于这个网站的大师来说非常简单。你能给我一些如何做的高级样本
由于
答案 0 :(得分:4)
我在model:didDeleteObject:atIndexPath:
中也得到了“EXC_BAD_ACCESS”,但我解决了这个问题。
要删除TTTableViewController中的行,您需要在DataSource实现中实现tableView:commitEditingStyle:
,如下所示:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { id object = [[self.items objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; [self.model didDeleteObject:object atIndexPath:indexPath]; } }
您还需要在DataSource中实现tableView:willRemoveObject:atIndexPath:
:
- (NSIndexPath*) tableView:(UITableView *)tableView willRemoveObject:(id)object atIndexPath:(NSIndexPath *)indexPath { // delete the object [object deleteFromDB]; // removeItemAtIndexPath returns YES if the section is removed if ([self removeItemAtIndexPath:indexPath andSectionIfEmpty:YES]) { // remove an index path only to that section return [NSIndexPath indexPathWithIndex:indexPath.section]; } else { return indexPath; } }
诀窍是改变你返回的NSIndexPath
只包含它的部分变空。然后TTTableViewController中的代码删除该部分而不是单元格。
HTH
答案 1 :(得分:1)
我发现的第一件事是,当表未处于编辑模式时,您正在从表中删除一行。