购物清单,选中时将行移至顶部

时间:2011-04-07 08:23:12

标签: iphone objective-c xcode sqlite uitableview

我正在开发一个购物清单,其中所有未购买项目位于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];
}

1 个答案:

答案 0 :(得分:1)

您不应删除并添加该项目。 将bool属性“buy”添加到模型中。 显示单元格时,请确保从buy = YES;

开始对数组进行排序

当你点击一个单元格更改buy =!buy 在表上重新加载数据

编辑:如果你想以正确的顺序买下买的,而不是bool让“买”一个int并存储它的订单索引