Wie lässt man die Eingabetaste auf dem iPhone die Tastatur verschwinden?

108

Ich habe zwei UITextFields(z. B. Benutzername und Passwort), aber ich kann die Tastatur nicht loswerden, wenn ich die Eingabetaste auf der Tastatur drücke. Wie kann ich das machen?

K. Honda
quelle

Antworten:

242

Zuerst müssen Sie das UITextFieldDelegateProtokoll in der Header-Datei Ihres View / ViewController wie folgt anpassen:

@interface YourViewController : UIViewController <UITextFieldDelegate>

Dann müssen Sie in Ihrer .m-Datei die folgende UITextFieldDelegateProtokollmethode implementieren :

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

    return YES;
}

[textField resignFirstResponder]; stellt sicher, dass die Tastatur geschlossen ist.

Stellen Sie sicher, dass Sie Ihre Ansicht / Ihren Ansichtscontroller als Delegierten von UITextField festlegen, nachdem Sie das Textfeld in .m:

yourTextField = [[UITextField alloc] initWithFrame:yourFrame];
//....
//....
//Setting the textField's properties
//....    
//The next line is important!!
yourTextField.delegate = self; //self references the viewcontroller or view your textField is on
Sid
quelle
7
Sie können den Delegaten auch im Storyboard implementieren, indem Sie auf das Textfeld klicken, das Bedienfeld Dienstprogramme anzeigen, auf Verbindungsinspektor klicken und den Delegatenausgang auf den Ansichtscontroller ziehen.
Guptron
1
Wo ist Ihre textFieldShouldReturn-Methode implementiert? Sie müssen diese Klasse als Delegierten von UITextField festlegen. Der Delegatenrückruf wird nur von der Klasse ausgelöst, die als Delegat festgelegt ist, und wenn die Klasse ihn implementiert hat.
Sid
1
Haben Sie MyViewController so eingestellt, dass es im Header mit UITextFieldDelegate übereinstimmt?
Sid
1
Solange myTextField korrekt zugewiesen wurde und nicht Null ist. Technisch ist es in Ordnung, wenn es Null ist (kein Absturz), aber dann wird das nichts tun :)
Sid
1
Und wenn ich hinzufügen darf, spielt es keine Rolle, ob Sie nur eine überschriebene UITextField-Klasse wie UIFloatLabelTextField verwenden, Sie BRAUCHEN NOCH yourTextField.delegate = self; !!!
Gellie Ann
19

Implementieren Sie die UITextFieldDelegate-Methode wie folgt:

- (BOOL)textFieldShouldReturn:(UITextField *)aTextField
{
    [aTextField resignFirstResponder];
    return YES;
}
Nick Weaver
quelle
6

Ihre UITextFields sollten ein Delegatenobjekt (UITextFieldDelegate) haben. Verwenden Sie den folgenden Code in Ihrem Delegaten, um die Tastatur verschwinden zu lassen:

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

Sollte soweit funktionieren ...

cschwarz
quelle
Hey Kumpel, ich habe getan, was du oben gesagt hast, aber ich kann die Tastatur immer noch nicht verschwinden lassen. Hast du eine Idee? Vielen Dank.
K. Honda
Hey Chris, jetzt ist alles sortiert. Vielen Dank.
K. Honda
6

Ich habe ein paar Versuche gemacht, hatte das gleiche Problem, das hat bei mir funktioniert:

Überprüfen Sie Ihre Rechtschreibung bei -

(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];

Ich habe meine korrigiert, textFieldanstatt textfield"F" groß zu schreiben ... und Bingo !! es funktionierte..

Ema
quelle
4

Wenn die Eingabetaste gedrückt wird, rufen Sie an:

[uitextfield resignFirstResponder];
Conor Taylor
quelle
Hey Conor, woher weiß die App, wann die Eingabetaste gedrückt wird? Vielen Dank.
K. Honda
3

Nach einiger Zeit habe ich etwas Sinnvolles gesucht, das habe ich zusammengestellt und es hat wie ein Zauber funktioniert.

.h

//
//  ViewController.h
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

// Connect your text field to this the below property.
@property (weak, nonatomic) IBOutlet UITextField *theTextField;

@end

.m

//
//  ViewController.m
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController



- (void)viewDidLoad
{
    [super viewDidLoad];
    // _theTextField is the name of the parameter designated in the .h file. 
    _theTextField.returnKeyType = UIReturnKeyDone;
    [_theTextField setDelegate:self];

}

// This part is more dynamic as it closes the keyboard regardless of what text field 
// is being used when pressing return.  
// You might want to control every single text field separately but that isn't 
// what this code do.
-(void)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
}


@end

Hoffe das hilft!

user2904476
quelle
3

Legen Sie den Delegaten des UITextField für Ihren ViewController fest, fügen Sie einen Referenzierungsausgang zwischen dem Eigentümer der Datei und dem UITextField hinzu und implementieren Sie diese Methode:

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{
   if (textField == yourTextField) 
   {
      [textField resignFirstResponder]; 
   }
   return NO;
}
Avinash651
quelle
3

Fügen Sie dies anstelle der vordefinierten Klasse hinzu

class ViewController: UIViewController, UITextFieldDelegate {

So entfernen Sie die Tastatur, wenn Sie außerhalb der Tastatur klicken

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }

und um die Tastatur zu entfernen, wenn Sie die Eingabetaste drücken

füge diese Zeile in viewDidLoad () hinzu

inputField ist der Name des verwendeten textField.

self.inputField.delegate = self

und fügen Sie diese Funktion hinzu

func textFieldShouldReturn(textField: UITextField) -> Bool {        
        textField.resignFirstResponder()        
        return true        
    }
Ali Kahoot
quelle
2

Swift 2:

Das ist es, was getan wird, um alles zu tun!

Schließen Sie die Tastatur mit der DoneTaste oder Touch outSide, Nextum zur nächsten Eingabe zu gelangen.

Ändern Sie zuerst TextFiled Return KeyTo Nextin StoryBoard.

override func viewDidLoad() {
  txtBillIdentifier.delegate = self
  txtBillIdentifier.tag = 1
  txtPayIdentifier.delegate  = self
  txtPayIdentifier.tag  = 2

  let tap = UITapGestureRecognizer(target: self, action: "onTouchGesture")
  self.view.addGestureRecognizer(tap)

}

func textFieldShouldReturn(textField: UITextField) -> Bool {
   if(textField.returnKeyType == UIReturnKeyType.Default) {
       if let next = textField.superview?.viewWithTag(textField.tag+1) as? UITextField {
           next.becomeFirstResponder()
           return false
       }
   }
   textField.resignFirstResponder()
   return false
}

func onTouchGesture(){
    self.view.endEditing(true)
}
Mojtabye
quelle
Von der Verwendung von Tags wird von Apple ausdrücklich abgeraten. Sie könnten stattdessen eine IBOutletCollection verwenden
Antzi
2

in schnell sollten Sie UITextfieldDelegate delegieren , es ist wichtig, es nicht zu vergessen, im viewController, wie:

class MyViewController: UITextfieldDelegate{

     mytextfield.delegate = self

     func textFieldShouldReturn(textField: UITextField) -> Bool {
          textField.resignFirstResponder()
     }
}
Eduardo Oliveros
quelle
0

Sie können dem uiTextField eine IBAction hinzufügen (das Releationsereignis lautet "Did End On Exit"), und die IBAction kann hideKeyboard heißen.

-(IBAction)hideKeyboard:(id)sender
{
    [uitextfield resignFirstResponder];
}

Sie können es auch auf die anderen Textfelder oder Schaltflächen anwenden. Sie können der Ansicht beispielsweise eine ausgeblendete Schaltfläche hinzufügen, wenn Sie darauf klicken, um die Tastatur auszublenden.

慭 慭 流 觞
quelle
0

Sie können diese UITextfield-Unterklasse ausprobieren, mit der Sie eine Bedingung für den Text festlegen können, um den UIReturnKey dynamisch zu ändern:
https://github.com/codeinteractiveapps/OBReturnKeyTextField

CodeInteractive
quelle
Bitte erläutern Sie Ihre Antwort und kopieren Sie den entsprechenden Teil vom Link zum Beitrag.
Rohit Gupta
0

Wenn Sie die Tastatur beim Schreiben in Textdateien der Warnbox verschwinden lassen möchten

[[alertController.textFields objectAtIndex:1] resignFirstResponder];
DURGESH
quelle