UITableView显示键值对

时间:2011-08-30 14:39:22

标签: iphone ios uitableview

我有一个需要显示的名称和值列表。在IB中维护大量标签和相关内容文本域很困难所以我正在考虑使用UITableView。有没有办法修复单元格的标签,然后只需绑定到NSDictionary并显示键/值名称或修复UITableView中的单元格和标签?

2 个答案:

答案 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,一切都会清楚。

您可以使用下一个表格查看单元格的类型:UITableViewCellStyleValue1UITableViewCellStyleValue2。它们有两个标签(一个用于键,一个用于值)。

或者您可以使用这些标签创建自己的单元格样式并为标签设置值。