2010-09-19 4 views
1

J'ai 2 instances de UITextField et 1 instance de UIPickerView. UIPickerView est capable de mettre à jour les données en UITextField en didSelectRow:(NSInteger)row inComponent:(NSInteger)component. Mais comment puis-je mettre à jour 2 UITextField de UIPickerView lorsque l'utilisateur touche le UITextView?Modifier 2 uitextfield par tour avec un select dans uipickerview

Merci. :)

Répondre

0

vous devrez faire l'UIPickerView l'inputView des champs de texte, j'ai fait un exemple.

fichier .h:

@interface aViewController : UIViewController <UIPickerViewDelegate,UIPickerViewDataSource> { 
    UITextField * textField0; 
    UITextField * textField1; 
    UIPickerView * pickerView; 
    UIToolbar * toolBar; 
    NSArray * items0; 
    NSArray * items1; 

} 
-(void)cancel; 
-(void)close; 

@end 

.m besoin de quelque chose comme ce qui suit:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    textField0 = [[UITextField alloc] initWithFrame:CGRectMake(10.f, 20.0f, 100.f, 30.f)]; 
    textField1 = [[UITextField alloc] initWithFrame:CGRectMake(130.f, 20.0f, 100.f, 30.f)]; 
    textField0.backgroundColor = [UIColor grayColor]; 
    textField1.backgroundColor = [UIColor grayColor]; 
    pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320.f, 200.f)]; 
    // Do any additional setup after loading the view from its nib. 
    [self.view addSubview:textField0]; 
    [self.view addSubview:textField1]; 

    toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320.f, 44.f)]; 
    UIBarButtonItem * cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel)]; 
    UIBarButtonItem * doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(close)]; 
    toolBar.items = [NSArray arrayWithObjects:doneButton,cancelButton, nil]; 
    items0 = [[NSArray alloc] initWithObjects:@"dogs",@"cats",@"llamas",@"emus", nil]; 
    items1 = [[NSArray alloc] initWithObjects:@"bone",@"catnip",@"hay", nil]; 
    [doneButton release]; 
    [cancelButton release]; 



    pickerView.showsSelectionIndicator = YES; 
    pickerView.delegate = self; 
    pickerView.dataSource = self; 

    textField1.inputView = pickerView; 
    textField0.inputView = pickerView; 

    textField1.inputAccessoryView = toolBar; 
    textField0.inputAccessoryView = toolBar; 

} 
#pragma mark - actions 
-(void)cancel 
{ 
    //reset the values to the original values on cancel... 
    //do that here. 
    [textField0 resignFirstResponder]; 
    [textField1 resignFirstResponder]; 
} 

-(void)close 
{ 
    textField0.text = [items0 objectAtIndex:[pickerView selectedRowInComponent:0]] ; 
    textField1.text = [items1 objectAtIndex:[pickerView selectedRowInComponent:1]] ; 
    [textField0 resignFirstResponder]; 
    [textField1 resignFirstResponder]; 
} 

#pragma mark - pickerview handling 

-(float)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{ 
    return 130.f; 
} 
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    if (component==0) { 
     return [items0 objectAtIndex:row]; 
    } 
    return [items1 objectAtIndex:row]; 

} 
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    if (component==0) { 
     textField0.text = [items0 objectAtIndex:row]; 
     return; 
    } 
    textField1.text = [items1 objectAtIndex:row]; 
} 
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    if (component ==0) { 
     return [items0 count]; 
    } 
    return [items1 count]; 
} 
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 2; 
} 

Je n'ai pas inclus un code de nettoyage.

Questions connexes