2 つのコンポーネントを持つを作成しましたUIPickerView
。最初のコンポーネント (A) の行数は 13 に固定されています。もう 1 つのコンポーネント (B) は、(A) で選択した行に依存する可変数の行を持ちます。
をロードするときUIPickerView
に、両方のコンポーネントでデフォルトで選択できるように次のように呼び出していますが、コンポーネント (A) だけが正しい値を表示するという問題があります。コンポーネント (B) には、正しい行セットまたは正しい選択が表示されません。
[picker selectRow:rowA inComponent:COMPONENT_A animated:YES];
[picker reloadAllComponents];
[picker selectRow:rowB inComponent:COMPONENT_B animated:YES];
このコードを呼び出した後、次を出力しようとしましたが、正しい値が出力されているようですが、ピッカーがコンポーネント (A) のみを表示すると、正しい値と選択が表示されます。
NSLog(@"(A) - row selected: %i", [picker selectedRowInComponent:COMPONENT_A]);
NSLog(@"(A) - number of rows: %i", [picker numberOfRowsInComponent:COMPONENT_A]);
NSLog(@"(B) - row selected: %i", [picker selectedRowInComponent:COMPONENT_B]);
NSLog(@"(B) - number of rows: %i", [picker numberOfRowsInComponent:COMPONENT_B]);
これをデバッグする方法や問題の可能性について何か考えがある人はいますか?
アップデート
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 2;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
switch (component) {
case COMPONENT_A:
{
return 13;
}
case COMPONENT_B:
{
NSInteger selectedRowIdx = [picker selectedRowInComponent:COMPONENT_A];
switch (selectedRowIdx) {
case A: return 2;
case B: return 4;
case C: return 6;
case D: return 8;
case E: return 10;
case F: return 12;
case G: return 14;
case H: return 16;
case I: return 18;
case J: return 20;
case K: return 22;
case L: return 24;
default: return 1;
}
}
}
return -1;
}
#pragma mark UIPickerViewDelegate
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
switch (component) {
case COMPONENT_A:
{
switch (row) {
case A: return @"A";
case B: return @"B";
case C: return @"C";
case D: return @"D";
case E: return @"E";
case F: return @"F";
case G: return @"G";
case H: return @"H";
case I: return @"I";
case J: return @"J";
case K: return @"K";
case L: return @"L";
default: return @"";
}
}
case COMPONENT_B:
{
if (row == 0) {
return @"";
} else {
return [NSString stringWithFormat:@"%i", (int)row];
}
}
}
return nil;
}