据此这个问题和 KyleC 的友善回答我已经实现了UITableViewController
其中有许多行依赖于从核心数据中获取。每行显示一个简单的NSString
(获取的对象的名称)并且有一个UIPickerView
hidden.
问题是,当我点击上一个中的行时,这是绝对明显的UITableViewController
打开UITableViewController
使用选择器视图时,segue 转换会出现一些延迟。
我知道这一点是因为以前的控制器(它们甚至执行核心数据请求)的转换速度并不慢。
-
可以一些UIPickerView
让转变变得如此缓慢且丑陋?
我应该在哪种模式下使用 Instruments 来了解哪个是缓慢犯罪的?
更重要的是:如果缓慢是由数量得出的UIPickerView
我该如何优化这个?
我想澄清的是,该应用程序非常轻,从 Core Data 中获取的对象只有 4 个,其中 4 个UIPickerView
s.
看来 UIPickerViews 和 UIDatePickers 从情节提要(也可能是 xib 的,但我没有尝试过)加载速度非常慢。在 iPad Air 上,加载静态 UITableViewController 大约需要 3 秒,该静态 UITableViewController 在“隐藏”单元格中包含 4 个 UIPickerView 和 8 个 UIDatePicker。 (对于在最新最好的硬件上运行的本机 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 的加载时间减少到零点几秒,并且似乎不会影响显示隐藏表格视图的动画。
注意:我确实尝试在 viewDidAppear: 方法中创建选择器,但它似乎仍然延迟了 UI。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)