将子视图添加到 UITableView 单元格的视图

Add a subview to a UITableView cell's view

我正在尝试在 UITableView 单元格 selected 时向该单元格的视图添加一个子视图(其中包含一个 UIDatePicker)。但是,当我 select 那个单元格时,子视图的内容没有被显示。

下面是我检查用户 select 是否是我要将子视图添加到的单元格:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == SectionOne && indexPath.row == RowOne && self.datePickerIsShowing == NO){

        [self.RowOne addSubview:_datePicker];
        [self showDatePickerCell];
    } else{
        [self hideDatePickerCell];
    }
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}

此外,下面是我如何创建日期选择器并显示它:

- (void)createDatePicker{
    _datePicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, 0, 100, 20)];
    _datePicker.datePickerMode = UIDatePickerModeTime;
    _datePicker.clipsToBounds = YES;
    _datePicker.backgroundColor = [UIColor colorWithRed:0.922 green:0.937 blue:0.949 alpha:1];
}


- (void)showDatePickerCell {
    self.datePickerIsShowing = YES;
    self.datePicker.hidden = NO;
    [self.tableView reloadData];
    NSLog(@"Show date picker");
}

下面是我如何将 selected 行设置为显示日期选择器所需的高度:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    CGFloat rowHeight = self.tableView.rowHeight;
        if (indexPath.section == SectionOne && indexPath.row == RowOne && self.datePickerIsShowing == YES){
                rowHeight = kDatePickerCellHeight;
    }
    else{
        rowHeight = self.tableView.rowHeight;
    }
    return rowHeight;
}

我猜你错过了 UIDatePicker 的框架。您需要使用 frame.Or 进行初始化 您是否在代码中的其他位置设置了框架。

    - (void)createDatePicker{
        _datePicker = [[UIDatePicker alloc]initWithFrame:CGRect(0,0,100,20)];
        _datePicker.datePickerMode = UIDatePickerModeTime;
        _datePicker.clipsToBounds = YES;
        _datePicker.backgroundColor = [UIColor colorWithRed:0.922 green:0.937 blue:0.949 alpha:1];

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

UITableViewCell *cell =[UITableViewCell cellForItemAtIndexPath:indexPath];

    if (indexPath.section == SectionOne && indexPath.row == RowOne && self.datePickerIsShowing == NO){

        [cell addSubview:_datePicker];
        [self showDatePickerCell];
    } else{
        [self hideDatePickerCell];
    }
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}

无法将视图添加到 UITableViewCell。而是将它们添加到 UITableViewCell 的 contentView。

也就是说,在 didSelectRowAtIndexPath 中添加视图并不是一件好事。如果我 select 行两次会怎样?如果我滚动以致该行不再可见会发生什么情况(单元格将被重复使用,但仍附加了日期选择器。您至少需要正确处理 prepareForReuse。