我阅读了有关如何管理UITableView中行的删除和重新排序的文档。我创建了编辑按钮,我可以删除行。我希望用户能够对行重新排序。这似乎很简单,但我不明白如何告诉细胞,他们可以被移动。如何使用删除按钮显示UITableView中的重新排序控件
要告诉他们可以删除的行我使用editingStyleForRowAtIndexPath,但如何告诉单元它也可以被移动,我在哪里设置showsReorderControl?我试图放置在cellForRowAtIndexPath,但没有显示。
谢谢!
我阅读了有关如何管理UITableView中行的删除和重新排序的文档。我创建了编辑按钮,我可以删除行。我希望用户能够对行重新排序。这似乎很简单,但我不明白如何告诉细胞,他们可以被移动。如何使用删除按钮显示UITableView中的重新排序控件
要告诉他们可以删除的行我使用editingStyleForRowAtIndexPath,但如何告诉单元它也可以被移动,我在哪里设置showsReorderControl?我试图放置在cellForRowAtIndexPath,但没有显示。
谢谢!
你不得不说,行可以被移动:
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
和实施该委托更新您的数据源:
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
Managing the Reordering of Rows添加到@benoit上面的答案。如果你的模型恰好是一个可变的数组,这样的事情就足够了的tableView:moveRowAtIndexPath: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方法安排和细胞的更新,但仍不能看到的重新排序控制。最终我发现这是因为我重写了layoutSubviews方法而不调用超级的默认实现。在我添加[super layoutSubviews]之后,我的重新排序控件终于出现了。
我们需要调用[super layoutSubviews]的原因是,当我们切换表格的编辑属性时,它会调用单元格的layoutSubviews方法,系统提供的控件(如重新排序控件)显示在UITableViewCell的默认layoutSubviews方法中。一旦你意识到这一点,你也可以修改你的layoutSubviews实现来改变你的单元格的外观,这取决于它是否被编辑,以便在重新排序控件出现时使它不那么笨拙。
所以这里是该行重新排序清单:
这就是牛逼他正在阅读的文档。我已经完全按照这种方式实现了该方法。但我仍然无法移动任何东西。我可以删除行。 – 2010-12-08 13:26:23