2
我試圖在TableView單元格內創建內聯DatePicker,類似於this和this 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;
}
然而,正在發生的事情是當選擇了第三部分的最後一行,日期選取器顯示在第一部分的第一行。有沒有人對我做錯了什麼有什麼建議?
嗨傑弗裏,這幾乎正是我需要的,謝謝!我嘗試了你的建議,但仍然有困難。是否有可能在聊天中討論更多?謝謝! – narner 2015-02-06 14:38:50
其實我相信我遇到的錯誤與我的文件中其他地方的代碼有關,所以我會將您的答案標記爲正確,因爲它至少可以解決此特定錯誤。 – narner 2015-02-06 15:10:43