簡體   English   中英

將子視圖添加到UITableView單元格的視圖

[英]Add a subview to a UITableView cell's view

我試圖在選擇該單元格時將一個子視圖(包含一個UIDatePicker)添加到UITableView單元格的視圖中。 但是,當我選擇該單元格時,不會顯示子視圖的內容。

下面是檢查用戶是否選擇了要將子視圖添加到的單元格的地方:

- (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");
}

下面是如何將所選行設置為顯示日期選擇器所需的高度:

- (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進行初始化。或者是否在代碼中將frame設置為其他位置。

    - (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中添加視圖並不是一件好事。 如果我兩次選擇該行會怎樣? 如果我滾動以使該行不再可見(會重復使用該單元格,並且仍附加了日期選擇器),將會發生什么情況。您至少需要適當地處理prepareForReuse。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM