2012-04-02 2 views
2

Mögliche Duplizieren klicken:
How to make return key on iphone make keyboard disappear?Wie die Tastatur verschwinden nach der Rückkehr Taste

ich zwei Textfelder in der Seite haben auf ich arbeite. Nur das erste Textfeld verschwindet, nachdem ich auf "Zurück" geklickt habe, aber es funktioniert nicht für das zweite Textfeld.

Hier sind die Methoden in meiner .m-Datei:

-(void) viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.cardNameTextField.delegate = self;  
    self.pinTextField.delegate = self; 
} 

-(BOOL) textFieldShouldReturn:(UITextField *)textField 
{  
    if (_cardNameTextField !=nil) 
    { 
     [self.cardNameTextField resignFirstResponder]; 
    } 
    else if (_pinTextField !=nil) 
    {  
     [self.pinTextField resignFirstResponder]; 
    } 
    return YES; 
} 

Tipps bitte

+0

Dank! Überprüfen Sie dieses heraus. – Hans

+3

Ich habe vergessen zu zählen, wie oft ich diese Frage auf SO gesehen habe. Was auch immer es ist, "count ++;"! – tipycalFlow

+0

@SimonWithington Danke! es funktioniert jetzt :) – Hans

Antwort

1

Das Problem mit Ihrem Code war, dass Sie, wenn Ihr UITextField s nil oder nicht, waren, wurden überprüft, die nil nicht gleich sind. Wann immer die Bedingungen überprüft wurden, ging es immer in den ersten Fall und kehrte zurück (der andere ist im else).Die folgenden Szenarien werden auch funktionieren:

-(BOOL) textFieldShouldReturn:(UITextField *)textField 
{  
    [textField resignFirstResponder]; 
    return YES; 
} 

ODER

-(BOOL) textFieldShouldReturn:(UITextField *)textField{ 
if (_cardNameTextField == textField) 
{ 
    [self.cardNameTextField resignFirstResponder]; 
} 
else if (_pinTextField == textField) 
{  
    [self.pinTextField resignFirstResponder]; 
} 
return YES; 
} 

ODER

einfach das else Stichwort im zweiten Fall entfernen.

ODER

Do it @Neelam Verma's way.

Ich würde das erste Szenario empfehlen, die den Ersthelfer zwingt, ohne zu überprüfen für alle Bedingungen zu abgefunden ...

+0

+1 für die richtige Antwort. –

+0

genial :) Danke! – Hans

1

Stellen Sie sicher :) Sie den Delegaten des Textfeldes festgelegt haben.

0

Verwenden Sie den Delegierten UITextFieldDelegate

Und in Ihrer Implementierungsklasse, haben Sie zwei Schritte:

  1. stellen Sie den Delegierten

    self.textField.delegate = self;

  2. implementieren diese Methode

    - (BOOL)textFieldShouldReturn:(UITextField *)textField { 
        [textField resignFirstResponder]; 
        return YES; 
    } 
    
+0

Danke! :) Ich habe das gemacht und es hat funktioniert. – Hans

+0

@Hans, das ist großartig! –

5

mit diesem ersetzen obigen Code und versuchen, wenn es hilft:

-(BOOL) textFieldShouldReturn:(UITextField *)textField{ 

    if ([_cardNameTextField isEditing]) { 

    [self.pinTextField resignFirstResponder]; 
    } 

    if ([_pinTextField isEditing]) { 

    [self.cardNameTextField resignFirstResponder]; 

    } 

    return YES; 
    } 
0

Wenn der Benutzer auf die Schaltfläche Fertig auf der Texttastatur tippt, hat zu keinem End On Exit Ereignis wird generiert, und zu diesem Zeitpunkt müssen wir dem Textfeld mitteilen, die Kontrolle aufzugeben, so dass die Tastatur weggehen wird. Um dies zu tun, müssen wir eine Aktionsmethode zu unserer Controller-Klasse hinzufügen. Wie wäre es damit:

in Ihrem. h:

- (IBAction)textFieldDoneEditing:(id)sender; 

in .m:

- (IBAction)textFieldDoneEditing:(id)sender { 
[sender resignFirstResponder]; 
} 
0

Dies kann helfen Sie!

- (void) textFieldDidEndEditing:(UITextField *) textField 
{ 
    [textField2 resignFirstResponder]; 
}