В iOS 7 разработчикам рекомендуется показывать сборщики дат между ячейками таблицы, когда это необходимо для ввода, а затем скрывать их при завершении. Как я могу достичь этого эффекта?
В iOS 7 разработчикам рекомендуется показывать сборщики дат между ячейками таблицы, когда это необходимо для ввода, а затем скрывать их при завершении. Как я могу достичь этого эффекта?
У Василики Костеску есть отличный учебник по этому поводу: 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
Ключевыми битами являются методы hide/show:
- (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];
}
Вы можете вызвать методы hide/show с помощью кнопки или просто выбрав строки в таблице. (Примечание. Если в других строках есть текстовые поля, вам может понадобиться скрыть DatePicker в методе делегата textFieldDidBeginEditing).
-(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 медленно открывает UITableViewController с UIPickerView