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