2012-12-18 60 views
0

我正在构建一个具有两个UI textField的应用程序。当UI文本框被触摸时,UI Picker会提示用户选择一个值以保留在UI文本字段中。当我测试应用程序并触摸一个UI TextView并滚动UI Picker时,两个UI textField都会更改值。意思是,每个UI文本字段都受到每个UI拾取器的影响。有人知道为什么谢谢。在一个视图中的UI UI选择器视图干扰每个UI选择器的文本视图

@interface ViewController() <UIPickerViewDataSource, UIPickerViewDelegate> 

@end 

@implementation ViewController 
@synthesize ageTextField; 
@synthesize relationshipTextField; 
@synthesize resultLabel; 
@synthesize calculateButton; 
@synthesize agePickerView; 
@synthesize relationshipPickerView; 
@synthesize ageArray; 
@synthesize relationshipArray; 

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

    //age pickerView 

    self.agePickerView = [[UIPickerView alloc]init]; 

    self.agePickerView.delegate = self; 
    self.agePickerView.dataSource = self; 
    self.agePickerView.showsSelectionIndicator = YES; 
    self.ageTextField.inputView = self.agePickerView; 

    self.ageArray = @[ @"1", @"2", @"3", @"4", @"5", @"5", @"6", @"7", @"8", @"9", @"10",  @"11", @"12" 
, @"13", @"14", @"15", @"16", @"17", @"18", @"19", @"20", @"21", @"22", @"23", @"24",  @"25", @"26", @"27", @"28", @"29", @"30", @"31", @"32", @"33", @"34", @"35", @"36", @"37", @"38", @"39", @"40", @"41", @"42", @"43", @"44", @"45", @"46", @"47", @"48", @"49", @"50", @"51", @"52", @"53", @"54", @"55", @"56", @"57", @"58", @"59", @"60", @"61", @"62", @"63", @"64", @"65", @"66", @"67", @"68", @"69", @"70", @"71", @"72", @"73", @"74", @"75", @"76", @"77", @"78", @"79", @"80", @"81", @"82", @"83", @"84", @"85", @"86", @"87", @"88", @"89", @"90", @"91", @"92", @"93", @"94", @"95", @"96", @"97", @"98", @"99", @"100" ]; 
[self pickerView:self.agePickerView 
didSelectRow:0 
inComponent:0]; 

//relationship pickerView 

self.relationshipPickerView = [[UIPickerView alloc]init]; 

self.relationshipPickerView.delegate = self; 
self.relationshipPickerView.dataSource = self; 
self.relationshipPickerView.showsSelectionIndicator = YES; 
self.relationshipTextField.inputView = self.relationshipPickerView; 

self.relationshipArray = @[ @"1", @"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13", @"14",@"15",@"16",@"17",@"18",@"19",@"20",@"21",@"22",@"23",@"24",@"25", @"26",@"27",@"28",@"29",@"30",@"31",@"32",@"33",@"34",@"35",@"36",@"37", @"38",@"39",@"40",@"41",@"42",@"43",@"44",@"45",@"46",@"47",@"48",@"49",@"50", @"51", @"52", @"53", @"54", @"55", @"56", @"57", @"58", @"59", @"60", @"61", @"62", @"63", @"64", @"65", @"66", @"67", @"68", @"69", @"70", @"71", @"72", @"73", @"74", @"75", @"76", @"77", @"78", @"79", @"80", @"81", @"82", @"83", @"84", @"85", @"86", @"87", @"88", @"89", @"90", @"91", @"92", @"93", @"94", @"95", @"96", @"97", @"98", @"99", @"100"]; 

[self pickerView:self.relationshipPickerView 
    didSelectRow:0 
    inComponent:0]; 

} 

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

-(int) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    return [self.ageArray count]; 
    return [self.relationshipArray count]; 
} 

-(NSString *) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ 
    return [self.ageArray objectAtIndex:row]; 
    return [self.relationshipArray objectAtIndex:row]; 
} 

-(void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent: (NSInteger)component{ 
    self.ageTextField.text = [self.ageArray objectAtIndex:row]; 
    self.relationshipTextField.text = [self.relationshipArray objectAtIndex:row]; 
} 

- (void)viewDidUnload 
{ 
    [self setAgeTextField:nil]; 
    [self setRelationshipTextField:nil]; 
    [self setResultLabel:nil]; 
    [self setCalculateButton:nil]; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

@end 

回答

3
-(int) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    return [self.ageArray count]; 
    return [self.relationshipArray count]; 
} 

这不是C(或Objective-C)是如何工作的。它会总是只执行第一行。

你需要条件化基于返回值UIPickerView是要求信息:

if (pickerView == self.agePickerView) { 
    return [self.ageArray count]; 
} else { 
    return [self.relationshipArray count]; 
} 

然后应用相同的模式对所有数据源的方法。

+0

它工作。如果可以,我会将其标记为正确。谢谢!另外,一旦选择了一个值,如何解除UI Picker? – user1681673

+0

@ user1681673因为您使用'UIPickerView'作为'UITextField'的'inputView',您只需将textField告知'resignFirstResponder'即可。 –

+0

我创建了一个关于取消选择器视图的新线程。你能检查出来吗?谢谢。 http://stackoverflow.com/questions/13926830/how-to-dismiss-a-ui-picker-that-is-connected-to-a-ui-text-field – user1681673

相关问题