当我尝试在tableview中只检查一个单元格时出错

时间:2013-11-12 12:59:26

标签: ios objective-c uitableview checkmark

当我在加载后检查第一个单元格时 - 没有任何反应,我一遍又一遍地敲击 - 没有任何反应。我可以检查其他细胞,第二个,第三个等等,然后我才能检查第一个细胞。这是我的方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSUInteger row = indexPath.row;
    NSUInteger oldRow = lastIndexPath.row;
    if (oldRow != row) {
        UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath]; 
        newCell.accessoryType = UITableViewCellAccessoryCheckmark;
        UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:lastIndexPath];
        oldCell.accessoryType = UITableViewCellAccessoryNone;
        lastIndexPath = indexPath;
    }
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

或许您可以建议其他方式来制作它(仅查看tableview中的一个单元格),因为我发现只有具有大量代码并且难以理解的模型。

2 个答案:

答案 0 :(得分:2)

这是因为首先您的lastIndexPath变量为nil,因此lastIndexPath.row将返回0.如果点击第一行,该行也为0,因此它赢了'输入if语句。将该语句替换为:if (!lastIndexPath || oldRow != row)

答案 1 :(得分:0)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell* cell;
    //cell creation code
    cell.accessoryType = nil != lastIndexPath && lastIndexPath.row == indexPath.row ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSArray* reloadRows = nil == lastIndexPath ? @[indexPath] : @[lastIndexPath, indexPath];
    lastIndexPath = indexPath;
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    [tableView reloadRowsAtIndexPaths:reloadRows withRowAnimation: UITableViewRowAnimationAutomatic];
}