2012-04-19 7 views
0

IndexPathを使用してTableViewに行を追加する方法が少し混乱しています。 は、最初に私がINIT: 他のクラスのUITableViewへのNSIndexPath

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

    //rows code here 

    [self.view addSubview:tableView]; 

は今、この両者の間に私は私のテーブルビューに、いくつかの行を追加したいと思います。 NSStringsにNSStringがあり、NSStringに要素名が含まれています。

だから私はこの試してみてください。

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

をそれから私は私が最初にUITableViewDataSourceに何とかこのを追加する必要があることを読みました。だから私はそれを間違って宣言した?私はむしろ不必要なデータを渡すのを避けるために頼んでいます。

+2

この投稿を見てください:http://stackoverflow.com/a/4022844/1228534 – graver

答えて

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]; 
+0

しかし、私は配列の行を表示する必要がありますどのような種類のデータですか? – Kuba

+1

それはあなた次第です。 cellForRowAtIndexPath:(NSIndexPath *)では、テーブルビューはデータソースにテーブルセルの設定を要求します。これは、アプリケーションが文字列や画像を設定するか、モデルを表現してテーブルセルに配置する場所です。上の例のコードの場合、配列は文字列の配列なので、翻訳はかなり簡単です。cell.textLabel.text = [self.array objectAtIndex:indexPath.row]; – danh

+0

ああ、それはとてもクールです:)ありがとう;) – Kuba

1

AFAIKは、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 [email protected]"MyIdentifier"] autorelease]; 
    [[cell textLabel] setText:[myNames objectAtIndex:[indexPath row]]]; 
    return cell; 
} 

あなたはそれがあなたのテーブルがスムーズにスクロールすると、あまりにも多くのメモリを占有していないことを確認する必要があります、再利用識別子上に読みたいかもしれません。

関連する問題