2016-04-06 9 views
0

Ich habe ein Textfeld say jobTextFiels, dessen inputView UIPickerView und inputAccessoryView eine UIToolBar ist. Beim Klicken auf die Schaltfläche Fertig (in der Symbolleiste) erscheint eine Warnung, deren Stil plainTextStyle ist, wenn die in der Auswahl ausgewählte Zeile den Text "Andere" enthält. Mein Problem ist, dass, wenn der Benutzer "Andere" aus der Auswahl auswählt und auf die Schaltfläche "Hinzufügen" bei Alarm klickt, die normale Tastatur für jobTextField angezeigt wird. Ich habe alles und jedes versucht, d. H., Ich habe dieses Textfeld aufgegeben, wo immer es möglich war, aber nichts hat für mich funktioniert.UIPickerView ändert sich in normales textField, wenn auf Alarm mit TextField geklickt wird

-(void)viewDidLoad 
{ 
    pickerView = [[UIPickerView alloc] init]; 
    pickerView.delegate = self; 
    pickerView.dataSource = self; 
    pickerView.showsSelectionIndicator = YES; 
    pickerView.backgroundColor=[UIColor whiteColor]; 
    _jobTypeTxtFld.inputView = pickerView; 
    _genderTxtFld.inputView = pickerView; 

    UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 50)]; 
    numberToolbar.barStyle = UIBarStyleDefault; 
    numberToolbar.items = [NSArray arrayWithObjects: 
          [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)], 
          nil]; 
    [numberToolbar sizeToFit]; 
    _jobTypeTxtFld.inputAccessoryView = numberToolbar; 
    _genderTxtFld.inputAccessoryView = numberToolbar; 
} 

- (void)doneWithNumberPad{ 

    if (_jobTypeTxtFld.isFirstResponder) { 
     if ([self.jobTypeTxtFld.text isEqualToString:@"Others"]) 
     { 
      [UITextFieldAnimation moveContainerToInitialPositionWithView:self.bgView]; 
      jobAlert = [[UIAlertView alloc]initWithTitle:@"Please enter your job type" message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Add",nil]; 
      jobAlert.alertViewStyle = UIAlertViewStylePlainTextInput; 
      [jobAlert show]; 
     } 
     else 
     { 
      [self.addrssTxtFld becomeFirstResponder]; 
     } 
    } 
    //[self.view endEditing:YES]; 
} 

- (void)alertView:(UIAlertView *)alertview clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
switch (buttonIndex) 
    { 
     case 0: 
     { 

     } 
      break; 

     case 1: 
     { 
      if (alertview == jobAlert) { 
       // [_jobTypeTxtFld resignFirstResponder]; 
       [[jobAlert textFieldAtIndex:0] resignFirstResponder]; 
       if ([[jobAlert textFieldAtIndex:0].text isEqualToString:@""]) 
       { 
        [UITextFieldAnimation getAlertWithTitle:@"Message" andMessage:@"Please enter your job type!"]; 
        [[jobAlert textFieldAtIndex:0] resignFirstResponder]; 
       } 
       else 
       { 
        self.jobTypeTxtFld.text = [jobAlert textFieldAtIndex:0].text; 
        [[jobAlert textFieldAtIndex:0] resignFirstResponder]; 
       } 
       [_jobTypeTxtFld resignFirstResponder]; 
      } 
     } 
      break; 
     default: 
      break; 
    } 

#pragma mark 
#pragma mark <UIPickerViewDataSource> 
#pragma mark 

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

#pragma mark - picker delegate 
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    if(_jobTypeTxtFld.isFirstResponder) 
    { 
     [self.jobTypeTxtFld setText:[jobTypeArr objectAtIndex:row]]; 

    } 
    else if(_genderTxtFld.isFirstResponder) 
    { 
     NSArray *arr = @[@"Male",@"Female"]; 
     [self.genderTxtFld setText:[arr objectAtIndex:row]]; 
    } 
} 


// tell the picker how many rows are available for a given component 
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 

    if(_jobTypeTxtFld.isFirstResponder) 
    { 
     return [jobTypeArr count]; 

    } 
    else 
    { 
     return 2; 
    } 


} 

// tell the picker the title for a given component 
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    if(_jobTypeTxtFld.isFirstResponder) 
    { 
     return [jobTypeArr objectAtIndex:row]; 

    } 
    else 
    { 
     NSArray *arr = @[@"Male",@"Female"]; 
     return [arr objectAtIndex:row]; 
    } 
} 

// tell the picker the width of each row for a given component 
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { 
    int sectionWidth = 300; 

    return sectionWidth; 
} 

On Click of Resturant server

When Others is selected from picker and done button is clicked

On click of add of alerview button

on click of ok

enter image description here

+0

Welchen Effekt wünschen Sie? – zcui93

+0

Im Screenshot oben, Screenshot mit Alarm 'Bitte geben Sie Ihren Jobtyp' ein uipickerview sollte nicht angezeigt werden und im letzten Screenshot hat UIPIckerview auf normales Keyboard gewechselt, was falsch ist. Was ich will, ist, Picker zu verschwinden, wenn der Benutzer auf die Schaltfläche Fertig klickt. –

+0

Entfernen Sie das zweite 'if' in' doneWithNumberPad', das ist der Ort, an dem die Alarmansicht angezeigt wird. Oder entfernen Sie alles darin und entfernen Sie die Kommentarzeichen '[self.view endEditing: YES];' – zcui93

Antwort

0

Auf Klicken auf die Taste mich getan rufen thod regisignFirstResponder. Ich hoffe, dies wird dir helfen.

+0

Ich habe alles versucht. Ich habe textField wo immer möglich wie bei done Button geklickt, auf Alert View geklickt. Aber es erscheint wieder, wenn eine Warnung mit textField angezeigt wird. Dieses Problem tritt aufgrund einer Warnung auf, die TextField enthält –

+0

Dann müssen Sie eine Bedingung schreiben, so dass Warnung, die Textfeld enthält, nicht angezeigt wird –

+0

In welchem ​​iOS erhalten Sie Problem? –