一个视图中的2个UI选择器视图干扰了每个UI Picker的文本视图

时间:2012-12-18 03:53:12

标签: objective-c ios uitextfield uipickerview uipicker

我正在构建一个包含两个UI textField的应用。触摸UI文本字段时,会出现UI Picker,供用户选择保留在UI textField中的值。当我测试应用程序并触摸一个UI TextView并滚动UI Picker时,两个UI textField都会更改值。意思是,每个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

1 个答案:

答案 0 :(得分: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];
}

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