什么调用setSelected:NO方法自动

Luk*_*ela 11 uitableview ios

我有UITableView和UITableViewCell这个奇怪的问题.每当-tableView:cellForRowAtIndexPath:调用setSelected:之后调用NO.

-(UITableViewCell *)tableView:(UITableView *)tableView
        cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSDictionary *cellData = dataSource[indexPath.row];

    NSString *cellId = nil;
    //choose cell type
    NSInteger type = [[cellData valueForKey:@"type"] integerValue];
    switch (type) {
        case 0:
            //root level
            cellId = @"rootHeaderCell";
            break;
        case 1:
            //sub header
            cellId = @"subHeaderCell";
            break;
        case 2:
        default:
            //value row - radiobutton
            cellId = @"radiobuttonCell";
            break;
    }

    CSBaseFilterCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId
                                                            forIndexPath:indexPath];

    // Configure the cell...
    [cell setData:cellData];

    return cell;
}
Run Code Online (Sandbox Code Playgroud)

cellData 包含有关选择和单元格的信息:

-(void)setData:(NSDictionary *)data {

NSLog(@"Set Data");
NSLog(@"data has selected=%d", [data hasKey:@"selected"]);
NSLog(@"data.selected=%@", [data valueForKey:@"selected"]);

    if ([data hasKey:@"selected"]) {
        [self setSelected:[[data valueForKey:@"selected"] boolValue]
                 animated:NO];

    }
}
Run Code Online (Sandbox Code Playgroud)

我设置了选择,但未选中.我已经在setData中添加了跟踪,并且值很好,我已经将跟踪放入setSelected:animated:并发现有3个调用:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];
    NSLog(@"%@ setSelected:selected=%d",self,selected);


    self.accessoryType = selected ? UITableViewCellAccessoryCheckmark:UITableViewCellAccessoryNone;
}
Run Code Online (Sandbox Code Playgroud)

这是日志输出中显示的内容:

2014-06-05 21:11:59.679 UITableView Filter Sort[42821:60b] Set Data
2014-06-05 21:11:59.679 UITableView Filter Sort[42821:60b] data has selected=1
2014-06-05 21:11:59.680 UITableView Filter Sort[42821:60b] data.selected=1
2014-06-05 21:11:59.680 UITableView Filter Sort[42821:60b] <CSRadioButtonCell: 0x8c80630; baseClass = UITableViewCell; frame = (0 64; 320 32); autoresize = W; layer = <CALayer: 0x8c76920>> setSelected:selected=1
2014-06-05 21:11:59.686 UITableView Filter Sort[42821:60b] <CSRadioButtonCell: 0x8c80630; baseClass = UITableViewCell; frame = (0 64; 320 32); autoresize = W; layer = <CALayer: 0x8c76920>> setSelected:selected=0
2014-06-05 21:11:59.811 UITableView Filter Sort[42821:60b] <CSRadioButtonCell: 0x8c80630; baseClass = UITableViewCell; frame = (0 64; 320 32); autoresize = W; layer = <CALayer: 0x8c76920>> setSelected:selected=0
Run Code Online (Sandbox Code Playgroud)

表放在了ViewController,它不是UITableViewController.

更新 我已经把setData:call willDisplayCell:forRowAtIndexPath:和call去了setSelected的超级定义,这解决了这个问题.它仍然显示在的setSelected被称为在使用setData之间没有参数的日志cellForRowAtIndexPathwillDisplayCell:forRowAtIndexPath:但至少willDisplay是去年:)

我也尝试使用我自己的"选择"属性checked,该属性设置在setData:和中didSelectRowAtIndexPath:.

Dan*_*Liu 6

做setSelected in - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

  • 它的行为方式相同,当我滚动时,我可以简单地看到勾号,但是当出现动画停止时,勾选消失了.当我删除调用[super setSelected:selected animated:animated]; 然后它就开始起作用了.然而,这并不能解释为什么使用`NO`参数多次调用setSelected. (3认同)