CYC-UIPickerView(省份+城市)

    @interface IkrboyViewController : UIViewController{  
        NSDictionary *dict;//用於存儲省份-城市的數據  
        NSArray *provinceArray;//省份的數組  
        NSArray *cityArray;//城市的數組,在接下來的代碼中會有根據省份的選擇進行數據更新的操作  
    }  

在.m的viewDidLoad方法中加上初始化數據的處理。具體處理在initPicker方法

    - (void)viewDidLoad  
    {  
        [super viewDidLoad];  
        // Do any additional setup after loading the view, typically from a nib.  
        [self initPicker];  
    }  

    //初始化PickerView使用的數據源  
    -(void)initPicker{  
        NSBundle *bundle = [NSBundle mainBundle];  
        NSString *plistPath = [bundle pathForResource:@"provinces_cities" ofType:@"plist"];  
        dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath];  
        provinceArray = [dict allKeys];  

        NSInteger selectedProvinceIndex = [self.pickerView selectedRowInComponent:0];  
        NSString *seletedProvince = [provinceArray objectAtIndex:selectedProvinceIndex];  
        cityArray = [dict objectForKey:seletedProvince];  
        NSLog(@"%d",[provinceArray count]);  
    }  

將數據綁定到UIPickerView

    //以下3個方法實現PickerView的數據初始化  
    //確定picker的輪子個數  
    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {  
        return 2;  
    }  
    //確定picker的每個輪子的item數  
    - (NSInteger)pickerView:(UIPickerView *)pickerView  
    numberOfRowsInComponent:(NSInteger)component {  
        if (component == 0) {//省份個數  
            return [provinceArray count];  
        } else {//市的個數  
            return [cityArray count];  
        }  
    }  
    //確定每個輪子的每一項顯示什麼內容  
    #pragma mark 實現協議UIPickerViewDelegate方法  
    -(NSString *)pickerView:(UIPickerView *)pickerView  
                titleForRow:(NSInteger)row forComponent:(NSInteger)component {  
        if (component == 0) {//選擇省份名  
            return [provinceArray objectAtIndex:row];  
        } else {//選擇市名  
            return [cityArray objectAtIndex:row];  
        }  
    }  

隨時監聽UIPickerView的滾動。

    //監聽輪子的移動  
    - (void)pickerView:(UIPickerView *)pickerView  
          didSelectRow:(NSInteger)row inComponent:(NSInteger)component {  
        if (component == 0) {  
            NSString *seletedProvince = [provinceArray objectAtIndex:row];  
            cityArray = [dict objectForKey:seletedProvince];  

            //重點!更新第二個輪子的數據  
             [self.pickerView reloadComponent:1];  

            NSInteger selectedCityIndex = [self.pickerView selectedRowInComponent:1];  
            NSString *seletedCity = [cityArray objectAtIndex:selectedCityIndex];  

            NSString *msg = [NSString stringWithFormat:@"province=%@,city=%@", seletedProvince,seletedCity];  
            NSLog(@"%@",msg);  
        }  
        else {  
            NSInteger selectedProvinceIndex = [self.pickerView selectedRowInComponent:0];  
            NSString *seletedProvince = [provinceArray objectAtIndex:selectedProvinceIndex];  

            NSString *seletedCity = [cityArray objectAtIndex:row];  
            NSString *msg = [NSString stringWithFormat:@"province=%@,city=%@", seletedProvince,seletedCity];  
            NSLog(@"%@",msg);  
        }  
    }  

利用下面的代碼,獲得UIPickerView的不同Component(滾輪)的選中的index

NSInteger selectedProvinceIndex = [self.pickerView selectedRowInComponent:0];  
NSInteger selectedCityIndex = [self.pickerView selectedRowInComponent:1]; 

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章