我确信这是一件容易的事情。我对目标C很陌生(拿起老板要外包的工作)并且可以使用我能得到的所有帮助。请在这里指出我正确的方向。基本上我想要设置的是:
我有一个电话号码列表,根据需要扩展到尽可能多的行。我没有问题填充和列表工作正常,但我希望列表中所有最近选择的项目在顶部更容易访问。因此,每当用户“didSelectRowAtIndexPath”时,我希望该行移到顶部。
我只知道这很简单......但我还没有找到解决方案。不着急我只想自己解决问题。提前致谢!
答案 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];
}