在重写-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{}函数时,实现了点击一个按钮alloc两个PickerView,但是当我在选第二个pickerView时,总是判断出错!可能我的逻辑上有点问题,可我不知道错在哪里?其实就是简单的if,else-if之间的判断关系下。面是部分代码: -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ int selectedRow; selectedRow = [pickerView selectedRowInComponent:component]; NSLog(@"selectedRow = %i", selectedRow);//这里调试的是第一个pickerView的row的值,显示正确 if([btn tag] ==1){ //点击tag为1的按钮,只显示一个pickerView if (selectedRow == 0) { NSLog(@"3KM"); [btn setTitle:@"3公里" forState:nil]; } else if(selectedRow == 1){ NSLog(@"2KM"); [btn setTitle:@"2公里" forState:nil]; } else if(selectedRow == 2){ NSLog(@"1KM"); [btn setTitle:@"1公里" forState:nil]; } else{ NSLog(@"500m"); [btn setTitle:@"500米" forState:nil]; } [distanceView removeFromSuperview]; } else if([btn tag] == 2){ //点击tag为2的按钮,显示两个pickerView,在另一个代理函数中实现了 if(component == AddressComponent){ // #define AddressComponent 0 第一个pickerView if(selectedRow == 0){ NSLog(@"北京"); sectionData = [[NSMutableArray alloc] initWithArray:sectionDataOfBeijing]; [addressView reloadComponent:SectionComponent]; } else if(selectedRow == 1){ NSLog(@"上海"); sectionData = [[NSMutableArray alloc] initWithArray:sectionDataOfShanghai]; [addressView reloadComponent:SectionComponent]; } else if(selectedRow == 2){ NSLog(@"深圳"); sectionData = [[NSMutableArray alloc] initWithArray:sectionDataOfShenzhen]; [addressView reloadComponent:SectionComponent]; } else if(selectedRow == 3){ NSLog(@"广州"); sectionData = [[NSMutableArray alloc] initWithArray:sectionDataOfGuangzhou]; [addressView reloadComponent:SectionComponent]; } } else if(component == SectionComponent){ //define SectionComponent 1 第二个pickerView int selectedSectionRow; selectedSectionRow = [pickerView selectedRowInComponent:SectionComponent]; NSLog(@"(selectedRow = %i, selectedSectionRow = %i)", selectedRow,selectedSectionRow); //这里调试的是两个pickerView中被选定row的值,不知道为什么,selectedRow没有保存上次的记录, //即使我把它设成是static也不行,只有当(0,0),(11),(2,2),(3,3)…时才能正确的处理。 if(selectedSectionRow == 0 && selectedRow == 0) //这个可以 { NSLog(@"北京 北京1"); [btn setTitle:@"北京 北京1" forState:nil]; [addressView removeFromSuperview]; } else if(selectedSectionRow == 0 && selectedRow == 1){ //当我第二个pickerView选上海1时,btn的title变为了"北京 北京1",打印两个变量的值为(0,0) NSLog(@"上海 上海1"); [btn setTitle:@"" forState:nil]; [addressView removeFromSuperview]; } else if(selectedSectionRow == 1 && selectedRow == 1){ NSLog(@"上海 上海2"); [btn setTitle:@"上海 上海2" forState:nil]; [addressView removeFromSuperview]; } else if(selectedSectionRow == 0 && selectedRow == 2){ //只要是selectedSectionRow的值为0,则selectedRow的值也为0,selectedSectionRow的值为1,selectedRow的值也为1 NSLog(@"深圳 深圳1"); [btn setTitle:@"深圳 深圳1" forState:nil]; [addressView removeFromSuperview]; } else if(selectedSectionRow == 1 && selectedRow == 2){ NSLog(@"深圳 深圳2"); [btn setTitle:@"深圳 深圳2" forState:nil]; [addressView removeFromSuperview]; } else if(selectedSectionRow == 2 && selectedRow == 2){ NSLog(@"深圳 深圳3"); [btn setTitle:@"深圳 深圳3" forState:nil]; [addressView removeFromSuperview]; } else if(selectedSectionRow == 0 && selectedRow == 3){ NSLog(@"广州 广州1"); [btn setTitle:@"广州 广州1" forState:nil]; [addressView removeFromSuperview]; } else if(selectedSectionRow == 1 && selectedRow == 3){ NSLog(@"广州 广州2"); [btn setTitle:@"广州 广州2" forState:nil]; [addressView removeFromSuperview]; } else if(selectedSectionRow == 2 && selectedRow == 3){ NSLog(@"广州 广州3"); [btn setTitle:@"广州 广州3" forState:nil]; [addressView removeFromSuperview]; } else if(selectedSectionRow == 3 && selectedRow == 3){ NSLog(@"广州 广州4"); [btn setTitle:@"广州 广州4" forState:nil]; [addressView removeFromSuperview]; } } } }
现在我的第二个pickerView的内容会随着第一个pickerView选中行的值不同而改变。但是在选第二个pickerView时不能正确选择。 |
|
15分 |
去掉第一个,看看第二个本身的行为是否正确。
tag 设置是否正确。 要一点点缩小问题的范围。 |
15分 |
很抱歉不能帮上你的忙,但是我想你起码可以用switch-case代替一下这么多让人眼花的if-else吧。
|
tag的设置是没有问题的,但是第一个去掉,就不能根据第一个来更新第二个pickerView的显示内容了。我想把两个调换一下。不过只能明天上班了去试试! |
|
哥们客气了,你说的对,用switch-case会好很多,我明天改改,谢谢你的提醒! |
|
10分 |
不懂的飘过
|
问题解决了,是我自己太粗心了
我在[btn tag]==2的处理函数中重新定义两个变量: int selectedAddressRow; int selectedSectionRow; 之后再进行处理就行了! |
|
每次都来捧场,哈哈,这个问题解决了~ |
|
呵呵,解决就好。。最近我在看网络和数据库 哎。。。
|
|
耐心点,得多去实践才能发现问题~ 加油! |