2

我正在尝试使用不同的 NSArray 数据更新单个 UIPickerView,该数据基于从 UISegmentedControl 中选择的索引。目前,当我更改控件时,numberOfRowsInComponent 不会更新,并且 titleForRow 只会在滚动选择器时更新。

NSArrays 填充在 viewDidLoad 中,我在 SegmentedControl 的 IBAction 上使用了 reloadAllComponents 方法。

@synthesize subnetView, classControl;

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {

    //One column

    return 1;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

    //set number of rows

    if (classControl.selectedSegmentIndex == 0){
        NSLog(@"Class A Rows %d", [classAArray count]);
        return classAArray.count;
    }
    else if (classControl.selectedSegmentIndex == 1){
        return classBArray.count;
    }
    else if (classControl.selectedSegmentIndex == 2){
        return classCArray.count;
    }
    return 0;
}
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

    //set item per row

    if (classControl.selectedSegmentIndex == 0){
        NSLog(@"Class A Rows %d", [classAArray count]);
        return [classAArray objectAtIndex:row];
    }
    else if (classControl.selectedSegmentIndex == 1){
        return [classBArray objectAtIndex:row];
    }
    else if (classControl.selectedSegmentIndex == 2){
        return [classCArray objectAtIndex:row];
    }
    return 0; 
}

-(IBAction)classChange{

    [subnetView reloadAllComponents]; 
}

根据在界面构建器中选择要“选择”的选择器,选择器会加载正确的数组和行数。基于此代码选择具有较少元素的数组时,NumberOfrowsInComponents不会更新,并且应用程序在到达较小阵列的末尾时将崩溃。

所以我的两个问题:

  1. 元素的更新仅在滚动时发生。
  2. 执行 reloadAllComponents 方法时,行数不会更新。

感谢收听!

4

1 回答 1

1

我以前见过这个。通常是由于没有连接pickerview插座引起的,实际上reloadAllComponents什么也没调用。但是当您滚动连接的数据源时,委托方法仍然有效。

这可以通过使用以下方式登录出口的值来轻松检查:

NSLog(@"%@",subnetView);

如果它(NULL)按我的预期记录,它将简单地连接您的 IB 插座,您就完成了。

于 2012-03-04T05:35:18.553 回答