选中后,将UITableView行移动到列表顶部

时间:2009-08-04 13:41:34

标签: iphone uitableview

我确信这是一件容易的事情。我对目标C很陌生(拿起老板要外包的工作)并且可以使用我能得到的所有帮助。请在这里指出我正确的方向。基本上我想要设置的是:

我有一个电话号码列表,根据需要扩展到尽可能多的行。我没有问题填充和列表工作正常,但我希望列表中所有最近选择的项目在顶部更容易访问。因此,每当用户“didSelectRowAtIndexPath”时,我希望该行移到顶部。

我只知道这很简单......但我还没有找到解决方案。不着急我只想自己解决问题。提前致谢!

4 个答案:

答案 0 :(得分:3)

元素的顺序是数据源(您的代码)的责任,而不是表视图。如果要重新排序,则需要重新排序用于驱动-cellForRowAtIndexPath:的数据结构。如果你想要动画,我不相信有一个很好的动画动画。您可以(轻松)做的最好的事情是执行删除和插入。有关如何设置动画的详细信息,请参阅Batch Insertion and Deletion of Rows and Sections。几个月前,我向UITableView开发人员询问了这些动画在OS2.x中的普遍缺陷和脆弱性,他们向我保证,在OS3中有很多工作需要改进。所以希望你可以按照文档进行操作,它不应该再崩溃了。

答案 1 :(得分:2)

无法将表中某个位置的行移到另一个位置。可以通过删除行然后将其添加回新位置来模拟它:

// Remove the row from your datasource here
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:sourcePath] withRowAnimation:UITableViewRowAnimationLeft];
// Add the row back into the datasource here
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:destPath] withRowAnimation:UITableViewRowAnimationLeft];

使用适当的命令替换注释以更新数据源

答案 2 :(得分:0)

UITableView有一个名为

的方法

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath

我相信你实际上必须编写代码,我不确定因为我从未使用过表格(我也很新)。

答案 3 :(得分:0)

试试这个(工作代码清单):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

if( indexPath.row == 0 ) return;

NSString * selectedNum = [numbers objectAtIndex:indexPath.row];  // NSMutableArray* numbers = dataStore
[selectedNum retain];

[numbers removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
           withRowAnimation:UITableViewRowAnimationLeft];
[numbers insertObject:selectedNum atIndex:0];
[tableView insertRowsAtIndexPaths:[NSArray
           arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]]
           withRowAnimation:UITableViewRowAnimationLeft];

[selectedNum release]; 

}