我有一个需要显示的名称和值列表。在IB中维护大量标签和相关内容文本域很困难所以我正在考虑使用UITableView。有没有办法修复单元格的标签,然后只需绑定到NSDictionary并显示键/值名称或修复UITableView中的单元格和标签?
答案 0 :(得分:3)
您不能像编写OS / X应用程序时那样绑定到表视图,但是下面的两个方法,在UITableView的数据源中应该可以解决这个问题:
@property (strong, nonatomic) NSDictionary * dict;
@property (strong, nonatomic) NSArray * sortedKeys;
- (void) setDict: (NSDictionary *) dict
{
_dict = dict;
self.sortedKeys = [[dict allKeys] sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)];
[self.tableView reloadData];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.sortedKeys count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath: indexPath];
NSString * key = self.sortedKeys[indexPath.row];
NSString * value = dict[key];
cell.textLabel.text = key;
cell.detailTextLabel.text = value;
return cell;
}
或在Swift中
var sortedKeys: Array<String> = []
var dict:Dictionary<String, String> = [:] {
didSet {
sortedKeys = sort(Array(dict.keys)) {$0.lowercaseString < $1.lowercaseString}
tableView.reloadData()
}
}
override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return sortedKeys.count
}
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell
let key = sortedKeys[indexPath.row] as String
let value = dict[key] as String
cell.textLabel.text = key
cell.detailTextLabel.text = value
return cell
}
答案 1 :(得分:1)
请阅读此Table View Programming Guide for iOS,一切都会清楚。
您可以使用下一个表格查看单元格的类型:UITableViewCellStyleValue1
或UITableViewCellStyleValue2
。它们有两个标签(一个用于键,一个用于值)。
或者您可以使用这些标签创建自己的单元格样式并为标签设置值。