The*_*imp 3 objective-c uipickerview uipickerviewdatasource ios8
我创建了一个UIPickerView包含两个组件的,第一个组件(A)的行数固定为13。其他组件(B)的行数可变,具体取决于(A)中选择的行。
加载时,UIPickerView我正在调用以下命令,以便可以默认选择两个组件中的选择,但是Im的问题是只有组件(A)显示正确的值。组件(B)没有显示正确的行集或正确的选择。
[picker selectRow:rowA inComponent:COMPONENT_A animated:YES];
[picker reloadAllComponents];
[picker selectRow:rowB inComponent:COMPONENT_B animated:YES];
Run Code Online (Sandbox Code Playgroud)
我试过在调用此代码后打印以下内容,似乎已打印出正确的值,但是当选择器仅显示组件(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]);
Run Code Online (Sandbox Code Playgroud)
是否有人对如何调试此问题或问题可能有什么想法?
更新资料
- (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;
}
Run Code Online (Sandbox Code Playgroud)
在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];
}
Run Code Online (Sandbox Code Playgroud)
另外,您做的地方:
NSInteger selectedRowIdx = [self selectedRowInComponent:COMPONENT_A];
Run Code Online (Sandbox Code Playgroud)
不应该是
NSInteger selectedRowIdx = [pickerView selectedRowInComponent:COMPONENT_A];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4541 次 |
| 最近记录: |