在同一个类中使用两个UIPickerView

use*_*567 3 iphone objective-c uipickerview

我为第一个UIPickerView编写了这段代码

- (void)viewDidLoad
     NSURL *url = [NSURL URLWithString:
                      @"http://localhost:8080/Data/resources/converter.country/"];
        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
        [request setDelegate:self];
        [request startAsynchronous];
      //  countrys = [[UIPickerView alloc] init];
        countrys.delegate = self;
        countrys.dataSource = self;
        countrys.showsSelectionIndicator = YES;
        countryField.inputView=countrys;


     - (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
        NSString *codeCity;
        codeCity=[countriesArray objectAtIndex:row];
        return codeCity;
    }

    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
        return 1;
    }

    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
        return [countriesCodeArray count];
    }
Run Code Online (Sandbox Code Playgroud)

然后我想用城市制作另一个UIPickerView.我写了这个

 citys.delegate = self;
    citys.dataSource = self;
    citys.showsSelectionIndicator = YES;
    cityField.inputView=citys;
Run Code Online (Sandbox Code Playgroud)

但是,当我点击它我有国家名单.我该如何更改数据源?以及如何使用UIPickerView的默认函数,如numberOfComponentsInPickerView,numberOfRowsInComponent:...与第二个UIPickerView?

Sau*_*abh 9

您可以将标记分配给pickerviews,然后可以在datasource/delegate方法中检查这些标记

citysPickerview.tag = 2

otherPickerview.tag = 1


// then you can check for these tags in pickerview datasource/delegate methods like this - 

- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

        NSString *title;

      if (pickerview.tag == 1) // this is otherPickerview
      {
          title=[countriesArray objectAtIndex:row]; // your logic to get title for otherpickerview


      }
      else if (pickerview.tag == 2) // this is citysPickerview
      {
         title=[countriesArray objectAtIndex:row]; // your logic to get title for cityspickerview


      }

  return title;

}
Run Code Online (Sandbox Code Playgroud)

您应该在所有数据源/委托代码中遵循相同的机制:)

  • 你也可以使用"if(pickerView == cityPickerView)......" (2认同)