iOS 7使用UIPickerView缓慢打开UITableViewController

Fre*_*ins 3 optimization objective-c uitableview uipickerview ios

根据这个问题和KyleC的答案,我实现了一个UITableViewController依赖于从Core Data获取的行.每行显示一个简单的NSString(获取的对象的名称)并具有UIPickerView隐藏.

问题在于,当我点击前一行UITableViewController打开UITableViewController带有选择器视图的行时,segue过渡有一些延迟是绝对明显的.

我知道这是因为以前的控制器(它们甚至执行核心数据请求)在转换中并不是那么慢.

-

有些人可以UIPickerView让转变变得如此缓慢和丑陋吗?在哪种模式下我应该使用Instruments来了解哪些是慢慢的内疚?

更重要的是:如果缓慢来自UIPickerViews 的数量,我该如何优化?

我想澄清一下,应用程序非常轻巧,Core Data提取的对象只有4个,有4 UIPickerView秒.

Ant*_*y F 9

似乎UIPickerViews和UIDatePickers从故事板(可能是xib,但我没有尝试过)加载速度非常慢.在iPad Air上花费大约3秒钟加载一个静态UITableViewController,其中包含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;
}
Run Code Online (Sandbox Code Playgroud)

这将UITableViewController的加载时间减少到十分之几秒,并且它似乎不会影响显示隐藏的tableview的动画.

注意:我确实尝试在viewDidAppear:方法中创建选择器,但它似乎仍然延迟了UI.