我正在开发一个购物清单,其中所有未购买项目位于UITable的顶部,所有已购买项目位于底部。从sqlite DB读取项目当用户首次单击购物清单项目时,表示用户已购买该项目。因此,我将标签更改为灰色并将单元格移动到底部,相应地也在数据源中。 (我通过删除项目并插入来完成此操作)
然而,当用户再次点击它(意味着他们需要再次购买)时,我希望单元格移动到顶部。我怎么做?我如何更新数据源?
这是我的代码
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
Item *item=[[appDelegate.slist objectAtIndex:indexPath.row]retain];
NSUInteger index=indexPath.row;
NSUInteger lastindex=appDelegate.slist.count-1;
//get the cell
UITableViewCell *cell =[tableView cellForRowAtIndexPath:indexPath];
if (item.iNeed==1) {
cell.textLabel.textColor=[UIColor lightGrayColor];
if (index!=lastindex) {
[appDelegate deleteSLItem:item]; //delete from DB
item.iNeed=0;
[appDelegate insertSLItem:item]; //insert again
//for animation
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:lastindex inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];
[tableView endUpdates];
}
}else if (item.iNeed==0) {
item.iNeed=1;
cell.textLabel.textColor=[UIColor blackColor];
/*
i want to know what am i supposed to do here to move the cell to the top and
correspondingly in the data source as well
*/
[appDelegate updateSLItem:item];
}
[item release];
}
答案 0 :(得分:1)
您不应删除并添加该项目。 将bool属性“buy”添加到模型中。 显示单元格时,请确保从buy = YES;
开始对数组进行排序当你点击一个单元格更改buy =!buy 在表上重新加载数据
编辑:如果你想以正确的顺序买下买的,而不是bool让“买”一个int并存储它的订单索引