0

I'm a little confused how to use IndexPath to add row into TableView. In first i init:

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

    //rows code here

    [self.view addSubview:tableView];

Now between this two i would like to add some row to my table View. I have an NSArray with NSStrings contains elements name.

So i try this:

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

Then I've read that I should first add this somehow to UITableViewDataSource. So i declared it wrong? I'm asking becouse i'd rather avoid unnecessary passing data.

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

私の知る限り、UITableViewにデータを追加するのはあまり良い方法ではありません。どちらの場合でも、次のようにテーブルビューのデータソースをセットアップする必要があります。

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;
}

Reuse Identifier を読みたいと思うかもしれません。テーブルがスムーズにスクロールし、メモリをあまり消費しないようにする必要があります。

于 2012-04-19T14:25:47.733 に答える