UITableView的单元格填充了对象属性...动态还是静态?

时间:2012-04-23 18:16:12

标签: objective-c xcode uitableview

我是iOS编程的新手,我不太习惯使用UITableView Cells 我需要在表格中以“每个单元格一个属性”的方式显示一些对象属性 如果数据存储在NSArray中,事情会容易得多:我会使用“动态单元格”布局并借助 tableView:cellForRowAtIndexPath:的indexPath变量,我会填充表很容易。
但是当数据“存储”在对象的20个属性中时如何做同样的事情呢?我是否应该使用“静态单元”布局,并且有一个巨大的开关来寻址20行中的每一行?有一种简单而“清洁”的方法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分: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;
}