用户界面越来越冻结,而滚动UIPickerView,UITableView ios8,ios9
问题描述:
我有一个视图,其中包含一个pickerView和一个TextView。
当我呈现我的视图时,滚动越来越困难。
经过4-5次的观看后,它卡住了越来越多,最终在滚动UIPickerView时完全冻结。 PickerView拥有4个组件,其中3个具有大约50个值。用户界面越来越冻结,而滚动UIPickerView,UITableView ios8,ios9
请检查下面我PickerView代码:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 4;
}
// The number of rows of data
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component
{
return [[_pickerData objectAtIndex:component] count];
}
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent: (NSInteger)component
{
switch (component){
case 0:
return 150.0;
case 1:
return 50.0f;
case 2:
return 20.0f;
case 3:
return 50.0f;
}
return 0;
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
UILabel* tView = (UILabel*)view;
if (!tView){
tView = [[UILabel alloc] init];
tView.font=[UIFont fontWithName:@"ArialNarrow" size:22];
tView.textAlignment=NSTextAlignmentCenter;
tView.text=_pickerData[component][row];
// Setup label properties - frame, font, colors etc
}
return tView;
}
请帮助我。
答
感谢您的帮助加里。
我已经解决了这个问题。问题与线程有关。当应用程序冻结时,我通过暂停应用程序来发现问题。在左侧,我们可以看到正在运行的线程。从那里我发现了所谓的线程。这让主线程感到不安,这就是为什么应用程序被冻结的原因。
答
如果你只想显示text
pickerView
那么我建议你使用这种方法。
- (NSAttributedString*) pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component {
NSAttributedString *str = [[NSAttributedString alloc] initWithString:_pickerData[component][row] attributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"ArialNarrow" size: 22], NSFontAttributeName, nil]];
return str;
}
使用
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
代替的可以是lable
ALLOC多次。
希望它能帮助你。
Garry,谢谢你的帮助。我试过了,但我又遇到了同样的问题。 – priya
检查你的前导概念,可能是后台线程上的一些UI操作工作。 – Garry
如果你不介意,你能告诉我如何调试线程问题?我在iOS方面经验不足。这对我很有帮助。 – priya