我很愚笨……重写UIPickerView的代理函数

iOS 码拜 6年前 (2015-05-08) 247次浏览 0个评论
 

在重写-(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时不能正确选择。
可能很多大侠会说我,都不自己思考一下,就一直发帖问,可是我真的是想了一天了!我一直按照我的逻辑去思考,所以一直困在里面出不来。实在是没有办法了,因为公司就我一个人做iPhone开发,只能在网上问你们了。谢谢各位!

15分
去掉第一个,看看第二个本身的行为是否正确。
tag 设置是否正确。
要一点点缩小问题的范围。
15分
很抱歉不能帮上你的忙,但是我想你起码可以用switch-case代替一下这么多让人眼花的if-else吧。
引用 1 楼 proteas 的回复:

去掉第一个,看看第二个本身的行为是否正确。
tag 设置是否正确。
要一点点缩小问题的范围。

tag的设置是没有问题的,但是第一个去掉,就不能根据第一个来更新第二个pickerView的显示内容了。我想把两个调换一下。不过只能明天上班了去试试!

引用 2 楼 dead_cicle 的回复:

很抱歉不能帮上你的忙,但是我想你起码可以用switch-case代替一下这么多让人眼花的if-else吧。

哥们客气了,你说的对,用switch-case会好很多,我明天改改,谢谢你的提醒!

10分
不懂的飘过
问题解决了,是我自己太粗心了

我在[btn tag]==2的处理函数中重新定义两个变量:

int selectedAddressRow;    
selectedAddressRow = [addressView selectedRowInComponent:AddressComponent];

int selectedSectionRow;
selectedSectionRow = = [addressView selectedRowInComponent:SectionComponent];

之后再进行处理就行了!
吸起教训,一定要认真!

引用 5 楼 yukiwang313 的回复:

不懂的飘过

每次都来捧场,哈哈,这个问题解决了~

呵呵,解决就好。。最近我在看网络和数据库 哎。。。
引用 8 楼 yukiwang313 的回复:

呵呵,解决就好。。最近我在看网络和数据库 哎。。。

耐心点,得多去实践才能发现问题~  加油!


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明我很愚笨……重写UIPickerView的代理函数
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!