0

我有点困惑如何使用 IndexPath 将行添加到 TableView 中。首先我初始化:

    tableView = [[UITableView alloc] initWithFrame:self.view.bounds]; 

    //rows code here

    [self.view addSubview:tableView];

现在在这两者之间,我想在我的表视图中添加一些行。我有一个带有 NSStrings 的 NSArray 包含元素名称。

所以我试试这个:

[[self tableView] beginUpdates];
[[self tableView] insertRowsAtIndexPaths:(NSArray *)myNames withRowAnimation:UITableViewRowAnimationNone];
[[self tableView] endUpdates];

然后我读到我应该首先以某种方式将它添加到 UITableViewDataSource。所以我宣布错了?我问是因为我宁愿避免不必要的传递数据。

4

2 回答 2

1

表视图(以及MVC中的大多数视图)的想法是它们反映了模型的状态。所以,是的,正如您所建议的,让您的数据源维护一个数组:

@property (strong, nonatomic) NSMutableArray *array;

对数组进行更改:

[self.array addObject:@"New Object"];  

记录哪些行发生了变化...

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[self.array count]-1 inSection:0];
NSArray *myNames = [NSArray arrayWithObject:indexPath];

然后使用您发布的代码让表视图知道模型不同...

[[self tableView] beginUpdates];
[[self tableView] insertRowsAtIndexPaths:myNames withRowAnimation:UITableViewRowAnimationNone];
[[self tableView] endUpdates];
于 2012-04-19T14:17:56.673 回答
1

AFAIK 这不是向 UITableView 添加数据的好方法。我误解了你想要做什么,在任何一种情况下,你都需要像这样设置你的 tableview 的数据源:

tableView = [[UITableView alloc] initWithFrame:self.view.bounds]; 

[tableView setDataSource:self];

[self.view addSubview:tableView];

然后你需要实现 UITableViewDataSource 协议(可能还有 UITableViewDelegate)。您将需要实现以下数据源方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [myNames count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [[[UITableViewCell alloc] initWithCellStyleDefault reuseIdentifier@"MyIdentifier"] autorelease];
    [[cell textLabel] setText:[myNames objectAtIndex:[indexPath row]]];
    return cell;
}

您可能想阅读重用标识符,有必要确保您的表格平滑滚动并且不占用太多内存。

于 2012-04-19T14:25:47.733 回答