2013-09-29 90 views
13

在iOS 7中,鼓勵開發人員在需要輸入時在表格單元格之間顯示日期選擇器,然後在完成時隱藏它們。我怎樣才能達到這個效果?iOS在UITableViewCells之間顯示UIPickerView

enter image description here

+1

有一個回答你的問題在這裏: http://stackoverflow.com/questions/17646351/make-uipickerview-appear-細胞之間觸摸單元格 –

回答

16

Vasilica Costescu在這裏有上有一個偉大的教程: http://masteringios.com/blog/2013/10/31/ios-7-in-line-uidatepicker/

而對於靜態表: http://masteringios.com/blog/2013/11/18/ios-7-in-line-uidatepicker-part-2/

示例代碼在這裏:https://github.com/costescv/InlineDatePicker

關鍵位是隱藏/顯示方法:

- (void)showDatePickerCell { 
    self.datePickerIsShowing = YES; 
    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 

    self.datePicker.hidden = NO; 
    self.datePicker.alpha = 0.0f; 

    [UIView animateWithDuration:0.25 animations:^{ 
     self.datePicker.alpha = 1.0f; 
    }]; 
} 

- (void)hideDatePickerCell { 
    self.datePickerIsShowing = NO; 
    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 

    [UIView animateWithDuration:0.25 
        animations:^{ 
         self.datePicker.alpha = 0.0f; 
        } 
        completion:^(BOOL finished){ 
         self.datePicker.hidden = YES; 
        }]; 
} 

這的UITableViewDelegate方法將「隱藏」的行通過其高度設置爲0:

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

    if (indexPath.section == 0 && indexPath.row == 4 && self.datePickerIsShowing == NO){ 
     // hide date picker row 
     return 0.0f; 
    } 
    return [super tableView:tableView heightForRowAtIndexPath:indexPath]; 
} 

您還可以從一個按鈕隱藏/顯示方法或只是在表中選擇行。 (注意:如果其他行中有文本字段,那麼您可能需要在textFieldDidBeginEditing委託方法中隱藏datePicker)。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.section == 0 && indexPath.row == 4) { 
     if (self.datePickerIsShowing){ 
      [self hideDatePickerCell]; 
     }else { 
      [self showDatePickerCell]; 
     } 
    } 
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

編輯:使用比一對夫婦,內聯選擇器視圖的更多的單個表中要小心。我注意到,他們往往從故事板非常緩慢加載:iOS 7 slow to open UITableViewController with UIPickerView

+0

@Antony F你有這段代碼和多個部分的經驗嗎? – davidOhara

+0

@chrizstone - 是的。在我的示例中,第0節的第4行只有一個日期選擇器,但可以在不同的行或節中添加多個日期選擇器。 –

+0

我試過了,但由於某種原因,有時在錯誤的行中顯示錯誤的選擇器... – davidOhara

相關問題