Iphone 在同一类中使用两个UIPickerView
我为第一个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
- (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)…”