gpt4 book ai didi

objective-c - UIPickerView selectRow 未按预期工作

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:39 43 4
gpt4 key购买 nike

我创建了一个 UIPickerView,它有两个组件,第一个组件 (A) 的行数固定为 13。另一个组件 (B) 的行数可变,其中取决于 (A) 中选择的行。

加载 UIPickerView 时,我调用以下内容以便我可以在两个组件中默认选择,但是我遇到的问题是只有组件 (A) 显示正确的值。组件 (B) 未显示正确的行集或正确的选择。

[picker selectRow:rowA inComponent:COMPONENT_A animated:YES];
[picker reloadAllComponents];
[picker selectRow:rowB inComponent:COMPONENT_B animated:YES];

我尝试在调用此代码后打印以下内容,并且似乎已打印出正确的值,但是当Picker仅显示组件(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;
}

最佳答案

pickerView 似乎没有时间正常呼吸所以我建议你让 viewDidLoad 正常加载 pickerView 然后在 -viewDidAppear: 中做你的事情。

好吧......无论如何你想要animated:YES 所以,再一次,在-viewDidLoad甚至-viewWillAppear中这样做没有意义

试试这个:

-(void)viewDidAppear:(BOOL)animated
{
[picker selectRow:rowA inComponent:COMPONENT_A animated:YES];

//no point reloading all components, just B
[picker reloadComponent:COMPONENT_B];

[picker selectRow:rowB inComponent:COMPONENT_B animated:YES];
}

还有,你做的地方:

NSInteger selectedRowIdx = [self selectedRowInComponent:COMPONENT_A];

不应该是

NSInteger selectedRowIdx = [pickerView selectedRowInComponent:COMPONENT_A];

关于objective-c - UIPickerView selectRow 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25832621/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com