iOS 7很慢,用UIPickerView打开UITableViewController

根据这个问题和KyleC类的答案我已经实现了一个UITableViewController有很多行依靠从核心数据提取。 每一行都显示一个简单的NSStringNSString的对象的名称),并隐藏一个UIPickerView

问题在于,当我点击前一个UITableViewController中用picker视图打开UITableViewController的行时,segue转换有一些延迟。

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

一些UIPickerView可以使转换如此缓慢和相当丑陋? 我应该用哪种模式来判断哪个是慢罪?

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

我想澄清的是,应用程序是非常轻,从Core Data提取的对象只有4, UIPickerView 4。

看起来,UIPickerViews和UIDatePickers从故事板(可能是xib的,但我没有尝试)加载非常缓慢。 在iPad Air上,需要大约3秒的时间才能在“hidden”单元中加载一个包含4个UIPickerViews和8个UIDatePickers的静态UITableViewController。 (3秒对于运行在最新和最好的硬件上的原生UI是永恒的!)

我发现的解决方法是在隐藏行显示之前以编程方式创buildUIPickerViews和UIDatePickers。 我所做的是在Interface Builder中创build空单元格,将这些单元格链接到IBOutlet属性,然后使用以下方法创buildDatePickers和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的加载时间减less到十分之几秒,并且似乎不影响显示隐藏的tableview的animation。

注意:我尝试在viewDidAppear:方法中创buildselect器,但它似乎仍然延迟了UI。