0

私はiOSプログラミングにかなり慣れておらず、UITableViewセルにはあま​​り慣れていません。
「セルごとに1つのプロパティ」の方法で、テーブルにいくつかのオブジェクトプロパティを表示する必要があります。
データがNSArrayに格納されている場合は、はるかに簡単になります。「動的セル」レイアウトを使用し、tableView:cellForRowAtIndexPath:のindexPath変数を使用して、テーブルを簡単に埋めることができます。
しかし、データがオブジェクトの20のプロパティに「格納」されている場合、同じことを行うにはどうすればよいでしょうか。「静的セル」レイアウトを使用し、20行のそれぞれにアドレス指定するための巨大なスイッチを用意する必要がありますか?これを行うための簡単で「よりクリーンな」方法はありますか?

ご協力いただきありがとうございます!

4

1 に答える 1

1

キーバリューコーディングが救いの手を差し伸べます!プロパティ名の配列を作成し、を使用valueForKey:してプロパティ値を取得します。

@implementation MyTableViewController {
    // The table view displays the properties of _theObject.
    NSObject *_theObject;

    // _propertyNames is the array of properties of _theObject that the table view shows.
    // I initialize it lazily.
    NSArray *_propertyNames;
}

- (NSArray *)propertyNames {
    if (!propertyNames) {
        propertyNames = [NSArray arrayWithObjects:
            @"firstName", @"lastName", @"phoneNumber", /* etc. */, nil];
    }
    return propertyNames;
}

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

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

    NSArray *propertyNames = [self _propertyNames];
    NSString *key = [propertyNames objectAtIndex:indexPath.row];
    cell.textLabel.text = [[_theObject valueForKey:key] description];
    return cell;
}
于 2012-04-23T21:03:09.853 に答える