在滚动UIPickerView,UITableView ios8,ios9时,UI被冻结

时间:2015-10-16 06:01:57

标签: ios objective-c uitableview uiscrollview uipickerview

我有一个包含pickerView和TextView的视图。
当我呈现我的视图时滚动越来越多。
在看了4-5次后,它卡住了越来越多,最后 UI 在滚动UIPickerView时完全冻结。 PickerView有4个组件,其中3个组件有大约50个值。

请查看下面的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;
   }

请帮帮我。

2 个答案:

答案 0 :(得分:0)

如果您只想在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多次分配。

希望对你有所帮助。

答案 1 :(得分:0)

感谢Garry的帮助。

我已经解决了这个问题。问题在于线程。每当应用程序冻结时,我都会通过暂停应用程序找到问题。在左侧,我们可以看到正在运行的线程。从那里我抓住了所谓的线程。令人不安的是主线程,这就是应用程序冻结的原因。