似乎 UIPickerViews 和 UIDatePickers 从情节提要加载非常缓慢(可能还有 xib,但我没有尝试过)。在 iPad Air 上,加载一个静态 UITableViewController 大约需要 3 秒,该控制器在“隐藏”单元格中包含 4 个 UIPickerViews 和 8 个 UIDatePickers。(对于在最新最好的硬件上运行的原生 UI 来说,3 秒是永恒的!)
我发现的解决方法是在显示隐藏行之前以编程方式创建 UIPickerViews 和 UIDatePickers。我所做的是在 Interface Builder 中创建空单元格,将这些单元格链接到 IBOutlet 属性,然后使用以下方法创建 DatePickers 和 Picker 视图:
- (UIDatePicker*)datePickerForCell:(UITableViewCell*)cell {
UIDatePicker * datePicker = [[UIDatePicker alloc] initWithFrame:cell.bounds];
[datePicker setDatePickerMode:UIDatePickerModeDateAndTime];
[datePicker addTarget:self action:@selector(pickerDateChanged:) forControlEvents:UIControlEventValueChanged];
datePicker.hidden = YES;
[cell addSubview:datePicker];
return datePicker;
}
- (UIPickerView*)pickerViewForCell:(UITableViewCell*)cell {
UIPickerView * picker = [[UIPickerView alloc] initWithFrame:cell.bounds];
[picker setDelegate:self];
[picker setDataSource:self];
picker.hidden = YES;
[cell addSubview:picker];
return picker;
}
这将 UITableViewController 的加载时间减少到了十分之几秒,并且似乎不会影响显示隐藏 tableview 的动画。
注意:我确实尝试在 viewDidAppear: 方法中创建选择器,但它似乎仍然会延迟 UI。