2
NSIndexPath* updatedPath = [NSIndexPath indexPathForRow: 0 inSection: 0]; 
NSIndexPath* updatedPath2 = [NSIndexPath indexPathForRow: 1 inSection: 0]; 
NSArray* updatedPaths = [NSArray arrayWithObjects:updatedPath, updatedPath2, nil]; 
[self.mySexyTableView reloadRowsAtIndexPaths:updatedPaths withRowAnimation:UITableViewRowAnimationTop];

上面的代码有效并且动画。问题是我有很多数据,我不想对行索引进行硬编码。由于我的表部分中只有一个部分可以为 0。如何动态生成 NSIndexPath 对象的 NSArray?

或者有没有更简单的方法来为表格视图设置动画。当用户单击表视图顶部的选项卡时,我的表视图中的所有行都会更改。

4

6 回答 6

7

要生成索引路径数组,您可以循环:

    NSMutableArray *updatedPaths = [NSMutableArray array];
    for (NSNumber *row in someArray) {
        NSIndexPath *updatedPath = [NSIndexPath indexPathForRow:[row intValue] inSection:0];
        [updatedPaths addObject:updatedPath];
    }
    [self.mySexyTableView reloadRowsAtIndexPaths:updatedPaths withRowAnimation:UITableViewRowAnimationTop];

如果重新加载 TableView 中的所有数据,为什么不直接调用 reloadData 方法呢?

于 2009-07-08T09:50:05.187 回答
6

如果要刷新整个部分:

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationTop];
于 2010-07-08T10:34:31.587 回答
3

如果您有多个具有相同行索引的 indexPathForRow,则会出现此异常。

为示例

[segmentTable reloadRowsAtIndexPaths: [[NSArray alloc] initWithObjects: 
                                [NSIndexPath indexPathForRow: 1 inSection: 1], 
                                [NSIndexPath indexPathForRow: 1 inSection: 1], nil]                                 withRowAnimation:UITableViewRowAnimationNone];
于 2009-09-07T11:09:13.583 回答
0

我终于让它工作了。这是代码:

NSMutableArray *indexPaths = [[[NSMutableArray alloc] init] autorelease];
for (int i = 0; i < [mySexyList count]; i++) {
   NSIndexPath *updatedPath = [NSIndexPath indexPathForRow:i inSection:0];
   [indexPaths addObject:updatedPath];
}

[self.myFunkyTableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationTop];

问题是我从 numberOfRowsInSection: 方法返回硬编码值,这与 mySexyList 大小不同。这使应用程序崩溃。

于 2009-07-09T07:19:47.990 回答
0

假设self.arTableData是表的可变数组 &tableViewUITableView. 假设有 10 行(这意味着数组中有 10 个对象)tableView。我确实实现了以下代码来删除动画行。

int i; // to remove from 3 to 6
for(i=2;i<6;i++)
{
    [self.arTableData removeObjectAtIndex:i];
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:i inSection:0]] withRowAnimation:UITableViewRowAnimationRight];
}

这个技巧对我有用,没有任何麻烦。希望它对你也一样。祝你好运。

于 2011-07-20T05:15:37.647 回答
0

只是将我的解决方案添加到混合中,因为一旦我找到它就很简单。发生的事情是我有一个表,它使用我自己的代码使用相同的技术“分组”在:cocoanetics.com

当用户执行需要更新单元格的操作,并且当时没有对表格进行分组时,我的代码试图使用

[[self tableView] reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationAutomatic];

指定单元格和不存在的标题的路径。这导致了其他人在上面报告的相同错误。我所要做的就是确保提供给 reloadRowsAtIndexPaths:withRowAnimation: 的“路径”确实存在。这样做了,一切都很好。

于 2013-07-16T14:43:18.983 回答