2

私はこのコードを持っています:

@interface MyBusinessesController : UIViewController
{
    NSDictionary *businesses;
    NSArray *items_array;
}
@property (weak, nonatomic) IBOutlet UILabel *messageLabel;
- (IBAction)plan:(id)sender;

@property (weak, nonatomic) IBOutlet UITableView *itemList;

@end

.m ファイルのヘッダー領域に UITableView と NSArray を設定します。次に、リモート サーバー呼び出しを行い、JSON を取得します。JSON データを次のような配列に取得します。

items_array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

次に、次のようなアイテムをループします。

for (int i = 0; i<= items_array.count - 1; i++) 
{
  NSDictionary *dict = [items_array objectAtIndex:i];

  NSString *item_title = [dict objectForKey:@"item_title"];
  NSString *item_id = [dict objectForKey:@"item_id"];
  ...

それをUITableViewの行として追加したいのですが、今それを行う方法に苦労しています。

私が望むのは、item_title をユーザーに表示することです。ユーザーがタイトルを押すと、その item_title の item_id を取得する方法を知ることができます。

ありがとうございました!

4

3 に答える 3

2

UITableViewDataSourceプロトコルに必要なメソッドを実装しdataSource、tableView のプロパティを に設定する必要がありますself

したがって、適切なUITableViewDelegateメソッドを実装しdelegate、tableView のプロパティを に設定しますself

どのメソッドが必須で、どのオプションのメソッドを実装する必要があるかについての詳細は、ドキュメントを参照してください。

.hクラスが両方のプロトコルに準拠していることをファイルで宣伝することを忘れないでください。

@interface MyBusinessesController : UIViewController <UITableViewDataSource, UITableViewDelegate>

を呼び出して、tableView のコンテンツを更新することができます[itemList reloadData]

于 2012-08-01T21:49:26.613 に答える
2

テーブル ビューは、使用されているように見えるものとは異なる動作をします。データをループしてテーブルを埋めることはありません。代わりに、自分自身をテーブルのデリゲートとして設定すると、テーブルは次のように尋ねます。

こちらの素晴らしいチュートリアルをご覧になることを強くお勧めします: http://kurrytran.blogspot.com/2011/10/ios-5-storyboard-uitableview-tutorial.html

于 2012-08-01T21:53:21.427 に答える
1

配列をループして文字列値を引き出す代わりに、UITableView のデータ ソース メソッドにこれを処理させることができます。したがって、 cellForRowAtIndexPath メソッドでは、次のようにインデックス パスを使用して items_array にインデックスを付けます。

NSDictionary *dict = [items_array objectAtIndex:[indexPath row]];

次に、ループで行ったように辞書から文字列を取り出し、セルのタイトルを文字列に設定します。セルを選択するために、コードを didSelectRowAtIndexPath メソッドに記述できます。

これは、私が取り組んでいたプロジェクトの例です。

    #pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [items_array count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault)
                                                   reuseIdentifier:@"cell"];

    NSDictionary *dict = [items_array objectAtIndex:[indexPath row]];
    cell.textLabel.text = [dict objectForKey:@"item_name"];

    return cell;
}

最初の方法では、テーブルに必要なセクションの数を指定します。非常に単純なテーブルが必要な場合、これは 1 になります。2 番目の方法は行数です。これは、items_array 内のアイテムの数になります[items_array count]。3 番目の方法は、インデックスに基づいてセルを作成します。セクション 0 から指定したセクション数まで、行 0 から指定したセクションあたりの行数まで移動します。したがって、ループする代わりに、配列にインデックスを付けることができます。[indexPath section]セクション番号と[indexPath row]行番号を指定します。

*新しいセルを作成する前にセルをデキューする必要があることはわかっていますが、私の配列は非常に小さいです。

于 2012-08-01T21:52:46.407 に答える