Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在同一类中使用两个UIPickerView_Iphone_Objective C_Uipickerview - Fatal编程技术网

Iphone 在同一类中使用两个UIPickerView

Iphone 在同一类中使用两个UIPickerView,iphone,objective-c,uipickerview,Iphone,Objective C,Uipickerview,我为第一个UIPickerView编写了这段代码 - (void)viewDidLoad NSURL *url = [NSURL URLWithString: @"http://localhost:8080/Data/resources/converter.country/"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [re

我为第一个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];
    }
然后我想再做一次关于城市的UIPickerView。这是我写的

 citys.delegate = self;
    citys.dataSource = self;
    citys.showsSelectionIndicator = YES;
    cityField.inputView=citys;

但当我点击它时,我看到了国家列表。我应该如何更改数据源?以及如何使用UIPickerView的默认函数,如numberOfComponentsInPickerView、numberOfRowsInComponent:。。。用第二个UIPickerView

您可以将标记分配给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;

}

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

您可以为2
UIPickerView
设置
标记,如so-
[countryPicker setTag:1]
,使用这些标记区分2个选择器视图

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
        return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView
      numberOfRowsInComponent:(NSInteger)component
{
    if([pickerView tag] == 1)
        return [countryNames count];
    else
        return [cityNames count];

}
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component
{
    if([pickerView tag] == 1)
        return [countryNames objectAtIndex:row];
    else 
        return [cityNames count];

} 

要获得更简单的解决方案,只需比较pickerView指针。这样可以节省使用标记的额外复杂性和维护

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    NSInteger numberOfRows = 0;

    if (pickerView == countrys) {
        numberOfRows = [countriesCodeArray count];
    }
    else if (pickerView == citys) {
        numberOfRows = [citysCodeArray count];
    }

    return numberOfRows;
}

注:此答案基于giuseppe的评论。

好吧,这是使用相同数据源使用2个或更多uipickerviews的唯一方法!是的…但是你应该在发布你的答案之前阅读其他答案。。不要发布类似的答案,而要更新现有的答案!非常感谢。这并不重要,尤其是因为第二个响应更为完整,您还可以使用“if(pickerView==cityPickerView)…”