2015-02-05 97 views
2

我試圖在TableView單元格內創建內聯DatePicker,類似於thisthis SO線程。試圖將內聯UIDatePicker添加到UITableViewCell

創建使用以下方法日期選擇器,該視圖被加載時被調用:

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

    NSLog(@"date picker created"); 
} 

然後我檢查是否選擇了在我的表視圖第三部分的底部行。如果是和日期選擇器已經沒有顯示,那麼我所說的方法來顯示日期選擇器的電池:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row == HourTimeZoneRow && self.datePickerIsShowing == NO) 
    { 
     NSLog(@"Time of day section"); 
     [self showDatePickerCell]; 
    } else 
    { 
     [self hideDatePickerCell]; 
    } 
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

下面是在日期選擇器的單元格的方法:

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

...和隱藏單元格:

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

下面是確定表視圖需要增加額外的電池顯示的UIDatePicker的方法。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    { 
     switch (section) { 
      case TableSectionOne: 
       return TotalRowsSection1; 
       break; 
      case TableSectionTwo: 
       return TotalRedZoneRows; 
       break; 
      case TableSectionThree: 
       if (self.datePickerIsShowing == YES) { 
        return TableSectionThree + 1; 
       } 
       else { 
        return TableSectionThree; 
       } 
       break; 
      default: 
       return 0; 
       break; 
     } 
    } 

最後,下面的方法是什麼,是應該確定的日期選擇器的單元格的高度:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    CGFloat rowHeight = self.tableView.rowHeight; 

    if (indexPath.row == HourTimeZoneRow){ 
     rowHeight = 164; 
    } 
    else { 
     rowHeight = self.tableView.rowHeight; 
    } 
    return rowHeight; 
} 

然而,正在發生的事情是當選擇了第三部分的最後一行,日期選取器顯示在第一部分的第一行。有沒有人對我做錯了什麼有什麼建議?

回答

4

您正在將datePicker添加到tableView,而不是tableView中的單元格。

從showDatePickerCell刪除此行:

[self.tableView addSubview:_datePicker]; 

然後將其添加(或取消隱藏)cellForItemAtIndexPath內適當單元內。

(類似:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *simpleTableIdentifier = @"SimpleTableItem"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

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

    if (indexPath.row == HourTimeZoneRow) { 
     // show the datePicker here 
    } 

    cell.textLabel.text = [tableData objectAtIndex:indexPath.row]; 
    return cell; 
} 

+0

嗨傑弗裏,這幾乎正是我需要的,謝謝!我嘗試了你的建議,但仍然有困難。是否有可能在聊天中討論更多?謝謝! – narner 2015-02-06 14:38:50

+0

其實我相信我遇到的錯誤與我的文件中其他地方的代碼有關,所以我會將您的答案標記爲正確,因爲它至少可以解決此特定錯誤。 – narner 2015-02-06 15:10:43

相關問題