使用iOS 7重用UIPickerView中的视图
编辑12-14-2015:此问题在iOS 7、iOS 8、iOS 9上再次频繁出现。。。。我认为苹果不再需要这种控制,应该禁止我们使用它,而不是让这样一个大错误 我使用UIPickerView和从Xib加载的自定义视图。 我在用这个方法使用iOS 7重用UIPickerView中的视图,ios,ios7,uipickerview,Ios,Ios7,Uipickerview,编辑12-14-2015:此问题在iOS 7、iOS 8、iOS 9上再次频繁出现。。。。我认为苹果不再需要这种控制,应该禁止我们使用它,而不是让这样一个大错误 我使用UIPickerView和从Xib加载的自定义视图。 我在用这个方法 -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIVi
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row
forComponent:(NSInteger)component reusingView:(UIView *)view
从UIPickerViewDelegate重新使用我的视图
在iOS 6中,我的UIPickerview可以完美地工作,并且可以重用我的视图
由于iOS7,reusingView总是为零,所以我需要为每一行加载NIB(我有250行)。我的观点是做一些处理,这样它可以占用一小部分内存,但x250=大内存泄漏
为了确定问题所在,我用UILabel做了一个简单的项目:
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UILabel *label = (UILabel *)view;
if(view == nil) {
label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 76)];
}
else {
NSLog(@"*******************************************************");
}
NSLog(@"Current inndex : %i",row);
label.text = [NSString stringWithFormat:@"TITRE %i", row];
return label;
}
使用iOS 6,可以正确地重用我的视图:
2013-12-17 14:27:25.395 EssaiReusedViewPicker[261:907]当前索引
:220 2013-12-17 14:27:25.396 EssaiReusedViewPicker[261:907]
*******************************************************2013-12-17 14:27:25.397当前索引:221
2013-12-17 14:27:25.404 EssaiReusedViewPicker[261:907]
*******************************************************2013-12-17 14:27:25.407当前索引:222
2013年12月17日14:27:25.409发电子邮件浏览者[261:907]
*******************************************************2013-12-17 14:27:25.410当前索引:223
2013年12月17日14:27:25.411发电子邮件给浏览者[261:907]
*******************************************************2013-12-17 14:27:25.412 EssaiReusedViewPicker[261:907]当前索引:224
2013年12月17日14:27:25.414发电子邮件给浏览者[261:907]
*******************************************************2013-12-17 14:27:25.415 EssaiReusedViewPicker[261:907]当前索引:225
2013-12-17 14:27:25.420电子邮件下载者[261:907]
*******************************************************2013-12-17 14:27:25.424当前索引:227
2013-12-17 14:27:25.425 EssaiReusedViewPicker[261:907]
但在iOS 7中,这是一个全新的故事…:
2013-12-17 14:36:09.555 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.557 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.557 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.560 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.560 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.561 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.563 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.563 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.564 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.566 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.567 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.567 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.568 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:09.568 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:09.569 EssaiReusedViewPicker[7209:70b] Current inndex : 0
2013-12-17 14:36:09.569 EssaiReusedViewPicker[7209:70b] Current inndex : 1
2013-12-17 14:36:14.172 EssaiReusedViewPicker[7209:70b] Current inndex : 3
2013-12-17 14:36:14.350 EssaiReusedViewPicker[7209:70b] Current inndex : 3
2013-12-17 14:36:14.351 EssaiReusedViewPicker[7209:70b] Current inndex : 2
2013-12-17 14:36:14.367 EssaiReusedViewPicker[7209:70b] Current inndex : 4
2013-12-17 14:36:14.667 EssaiReusedViewPicker[7209:70b] Current inndex : 4
2013-12-17 14:36:14.668 EssaiReusedViewPicker[7209:70b] Current inndex : 3
2013-12-17 14:36:14.700 EssaiReusedViewPicker[7209:70b] Current inndex : 5
2013-12-17 14:36:15.067 EssaiReusedViewPicker[7209:70b] Current inndex : 5
2013-12-17 14:36:15.067 EssaiReusedViewPicker[7209:70b] Current inndex : 4
2013-12-17 14:36:15.083 EssaiReusedViewPicker[7209:70b] Current inndex : 6
2013-12-17 14:36:15.367 EssaiReusedViewPicker[7209:70b] Current inndex : 6
2013-12-17 14:36:15.367 EssaiReusedViewPicker[7209:70b] Current inndex : 5
2013-12-17 14:36:15.400 EssaiReusedViewPicker[7209:70b] Current inndex : 7
2013-12-17 14:36:16.416 EssaiReusedViewPicker[7209:70b] Current inndex : 7
那怎么了?iOS或…?我已向苹果技术支持部门报告了我的问题。他们确认了错误: iOS 6和iOS 7中的行为似乎确实存在差异
他们让我报告bugreport工具上的一个bug。现在,只需等待修复:)“(我有250行)”,您是否将
UITableViewCell
与UIPickerview
子视图一起使用?不,是简单的UIView。这不应该是一个问题,因为可以使用带有UILabel的重用视图。即使使用UILabel,它也不起作用如果您有行,为什么不对自定义单元格使用UITableView
?因为我不想要tableView,而是UIPickerView。。。因为当我需要在列表中选择一个项目时,UIPickerView是合适的组件。哦,那么你想重用你在UIPickerView
中使用的UILabel
s,我不同意这个错误已经修复。我看不到任何迹象表明iOS 7或iOS 7.1或iOS 8中修复了此错误。我将再次提交错误。对@QLag,但这不是tableView:cellforrowatinexpath:
。它根本不是一个表视图。这是pickerView:viewForRow:forComponent:reusingView:
。运行my,您将看到没有标签被重用:事实上,当您上下滚动时,我们会创建成百上千个标签,即使picker视图只有五十行。您可以在7、7.1或8上运行my,你会发现我们从来没有重复使用过任何标签。看来这个错误仍然存在于iOS 9中。已提交雷达: