Iphone 如何使用删除按钮在UITableView中显示重新排序控件
我阅读了有关如何在UITableView中管理行的删除和重新排序的文档。我创建了编辑按钮,可以删除行。我希望用户能够重新排序的行以及。这看起来很简单,但我不明白如何告诉细胞它们可以移动 要告诉行它们可以被删除,我使用editingStyleForRowAtIndexPath,但如何告诉单元格它也可以被移动,以及在哪里设置ShowsOrderControl?我试图在cellForRowAtIndexPath中放置,但什么都没有显示Iphone 如何使用删除按钮在UITableView中显示重新排序控件,iphone,uitableview,ios4,Iphone,Uitableview,Ios4,我阅读了有关如何在UITableView中管理行的删除和重新排序的文档。我创建了编辑按钮,可以删除行。我希望用户能够重新排序的行以及。这看起来很简单,但我不明白如何告诉细胞它们可以移动 要告诉行它们可以被删除,我使用editingStyleForRowAtIndexPath,但如何告诉单元格它也可以被移动,以及在哪里设置ShowsOrderControl?我试图在cellForRowAtIndexPath中放置,但什么都没有显示 谢谢 您必须说行可以移动: - (BOOL)tableView:(
谢谢 您必须说行可以移动:
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
并实现此委托以更新数据源:
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
参见上文@benoit答案中添加的内容。如果您的模型恰好是一个可变数组,那么对于tableView:MoveRowatineXpath:toIndexPath:
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
id objectToMove = [_objects objectAtIndex:fromIndexPath.row];
[_objects removeObjectAtIndex:fromIndexPath.row];
[_objects insertObject:objectToMove atIndex:toIndexPath.row];
[tableView reloadData];
[self saveObjects]; // A method of your own to make new positions persistent
}
试试这个。这将处理简单tableview情况下单元格的排列和更新
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
[tableData insertObject: [tableData objectAtIndex:sourceIndexPath.row] atIndex:destinationIndexPath.row];
[tableData removeObjectAtIndex:(sourceIndexPath.row + 1)];
}
在我的例子中,我已经实现了所有必需的UITableViewDelegate方法,如Apple文档和此处的答案中所述,但仍然无法看到reorder控件。最终我发现这是因为我重写了layoutSubviews方法,而没有调用super的默认实现。在我添加了[super LayoutSubView]之后,我的重新排序控件终于出现了 我们需要调用[super layoutSubviews]的原因是,当我们切换表的编辑属性时,它将调用单元格的layoutSubviews方法,并且系统提供的控件(如reorder控件)显示在UITableViewCell的默认layoutSubviews方法中。一旦意识到这一点,还可以修改layoutSubviews实现,根据单元格是否正在编辑来更改单元格的外观,以使其在“重新排序”控件出现时不那么笨拙 下面是行重新排序的检查表:
这就是我正在阅读的文档。我已经用这种方式实现了这个方法。但我还是不能移动任何东西。我可以直接删除行。哦,对不起,我刚刚注意到必须实现MoveRowatineXpath。我认为只需要修改数据源。谢谢请注意:您不应该从
moveRowAtIndexPath:
回调调用insertRowsAtIndexPaths:
或deleteRowsAtIndexPaths:
。