2

UISegmentedControl から選択されたインデックスに基づいて、単一の UIPickerView を別の NSArray のデータで更新しようとしています。現在、コントロールを変更すると、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]; 
}

Interface Builder 内で「選択」されるように選択されたセレクターに基づいて、ピッカーには正しい配列と行数がロードされます。要素の少ない配列を選択するときのこのコードに基づいて、numberOfRowsInComponents は更新されず、小さい配列の最後に到達するとアプリがクラッシュします。

だから私の2つの問題:

  1. 要素の更新は、スクロール時にのみ発生します。
  2. reloadAllComponents メソッドを実行しても、行数は更新されません。

聞いてくれてありがとう!

4

1 に答える 1

1

これは前に見たことがあります。通常、これは pickerview アウトレットが接続されておらず、事実reloadAllComponents上何も呼び出していないことが原因です。ただし、接続されたデータ ソースとデリゲート メソッドをスクロールすると、引き続き機能します。

これは、以下を使用してアウトレットの値にログインすることで簡単に確認できます。

NSLog(@"%@",subnetView);

期待どおりにログが記録される場合(NULL)は、IB アウトレットを接続するだけで完了です。

于 2012-03-04T05:35:18.553 に答える