Я создал UIPickerView
, который имеет два компонента, первый компонент (A) имеет фиксированное количество строк, установленных на 13. Другой компонент (B) имеет переменное количество строк, которое в зависимости от строки, выбранной в (A).UIPickerView selectRow не работает как ожидалось
При загрузке UIPickerView
я вызываю следующее, так что я могу по умолчанию выбирать оба компонента, однако проблема Im Im заключается в том, что только компонент (A) показывает правильные значения. Компонент (B) не отображает правильный набор строк или правильный выбор.
[picker selectRow:rowA inComponent:COMPONENT_A animated:YES];
[picker reloadAllComponents];
[picker selectRow:rowB inComponent:COMPONENT_B animated:YES];
Я попытался распечатав следующее после вызова этого кода, и кажется, что правильные значения распечатываются, но когда выбор показывает только компонент (А) показывает правильные значения и выбор.
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]);
Есть ли у кого-нибудь идеи относительно того, как отлаживать это или что может быть проблемой?
Update
- (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;
}
и ... что есть происходит в вашем '-: titleForRow: forComponent:' или '-viewForRow: forComponent:'? – staticVoidMan
@staticVoidMan Я добавил эту информацию. –
Где вы это используете? '[picker selectRow: rowA inComponent: COMPONENT_A animated: YES]; [сборщик reloadAllComponents]; [picker selectRow: rowB inComponent: COMPONENT_B animated: YES]; 'вы не должны делать это в' init', но в конечном итоге в 'viewDidLoad' – Daniele