UITableView中的默认清单

时间:2012-09-13 18:36:50

标签: iphone ios uitableview

我想在UITableView中为单个选项实施核对清单。另外,我需要默认选择一个单元格。这是我在cellForRowAtIndexPath中的实现:

NSUInteger row = [indexPath row];
NSUInteger oldRow = [lastIndexPath row];    
cell.accessoryType = (row == oldRow && lastIndexPath != nil) ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;

if (indexPath.row == selectedRow ) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
 }
else {
    cell.accessoryType = UITableViewCellAccessoryNone;
 }

didSelectRowAtIndexPath有以下代码:

if (!self.lastIndexPath) {
    self.lastIndexPath = indexPath;
}

if ([self.lastIndexPath row] != [indexPath row])
{
    UITableViewCell *newCell = [tableView cellForRowAtIndexPath: indexPath];
    newCell.accessoryType = UITableViewCellAccessoryCheckmark;

    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:self.lastIndexPath]; 
    oldCell.accessoryType = UITableViewCellAccessoryNone;

    self.lastIndexPath = indexPath;  
}
else {
    UITableViewCell *newCell = [tableView cellForRowAtIndexPath: indexPath];
    newCell.accessoryType = UITableViewCellAccessoryCheckmark;
}

使用此代码,我可以获得默认选中标记,但每当我选择另一行时 第一个保持选中状态,直到我没有单击该单元格。那么,如果我想选择我想要的结果,我该怎么办?

`

1 个答案:

答案 0 :(得分:2)

我认为代码有点太复杂了。您只需要一个属性:

NSInteger _selectedRow;

这在初始定义时将提供默认的选定行。并且它还将保持先前的选择(当寻找要取消选择的单元格时):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_IDENTIFIER];

    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CELL_IDENTIFIER];
    }

    if ([indexPath row] == _selectedRow) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }

    cell.textLabel.text = [NSString stringWithFormat:@"Row %d", indexPath.row];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (_selectedRow >= 0) {
        [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:_selectedRow inSection:0]].accessoryType = UITableViewCellAccessoryNone;
    }
    _selectedRow = [indexPath row];
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

创建此视图时,如果您指定:

_selectedRow = 1;

然后将自动选择第二行。值-1表示没有默认选择,上述两种方法将自动添加/删除抽头行中的复选标记。