UIPickerViews と UIDatePickers は、ストーリーボード (およびおそらく xib のものですが、私は試していません) からの読み込みが非常に遅いようです。iPad Air では、「非表示」セルに 4 つの UIPickerView と 8 つの UIDatePickers を含む静的 UITableViewController をロードするのに約 3 秒かかります。(最新かつ最高のハードウェアで実行されているネイティブ 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 の読み込み時間が 10 分の 1 秒に短縮され、非表示のテーブルビューを表示するアニメーションには影響がないようです。
注: viewDidAppear: メソッドでピッカーを作成しようとしましたが、それでも UI が遅延しているように見えました。