383 Stimmen

Einfacher Weg, die Tastatur zu verwerfen?

Ich habe eine ganze Reihe von Steuerelementen, die über viele Tabellenzellen in meiner Tabelle verstreut sind, und ich frage mich, ob es einen einfacheren Weg gibt, die Tastatur zu deaktivieren, ohne alle meine Steuerelemente in einer Schleife durchlaufen zu müssen und sie alle als erste Antwort zurücktreten zu lassen. Ich schätze, die Frage ist: Wie würde ich den aktuellen ersten Responder auf die Tastatur bekommen?

1voto

Um eine Tastatur zu deaktivieren, nachdem die Tastatur eingeblendet wurde, gibt es folgende Möglichkeiten 2 Fälle ,

  1. wenn das UITextField innerhalb einer UIScrollView

  2. wenn das UITextField außerhalb einer UIScrollView

2.wenn das UITextField außerhalb einer UIScrollView liegt überschreiben Sie die Methode in Ihrer UIViewController-Unterklasse

müssen Sie auch Delegaten für alle UITextView hinzufügen

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
}
  1. In einem Scroll-Ansicht, Tippen außerhalb wird kein Ereignis ausgelöst in diesem Fall also einen Tipp-Gesten-Erkenner verwenden , Ziehen und Ablegen einer UITapGesture für die Bildlaufansicht und eine IBAction für sie erstellen .

um eine IBAction zu erstellen, drücken Sie ctrl+klick auf die UITapGesture und ziehen Sie sie in die .h Datei des viewcontrollers.

Hier habe ich tappedEvent als meinen Aktionsnamen angegeben

- (IBAction)tappedEvent:(id)sender {
      [self.view endEditing:YES];  }

die angegebenen Informationen stammen aus dem folgenden Link, bitte lesen Sie für weitere Informationen oder kontaktieren Sie mich, wenn Sie die Daten nicht verstehen.

http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/

0voto

Der einfachste Weg ist der Aufruf der Methode

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    if(![txtfld resignFirstResponder])
    {
        [txtfld resignFirstResponder];
    }
    else
    {

    }
    [super touchesBegan:touches withEvent:event];
}

0voto

mattsven Punkte 20381

Eine etwas robustere Methode, die ich kürzlich anwenden musste:

- (void) dismissKeyboard {
    NSArray *windows = [UIApplication sharedApplication].windows;

    for(UIWindow *window in windows) [window endEditing:true];

    //  Or if you're only working with one UIWindow:

    [[UIApplication sharedApplication].keyWindow endEditing:true];
}

Ich habe festgestellt, dass einige der anderen "globalen" Methoden nicht funktionieren (zum Beispiel, UIWebView & WKWebView sich weigerte, zurückzutreten).

0voto

Murat KAYA Punkte 23

Fügen Sie einen Tap Gesture Recognizer zu Ihrer Ansicht hinzu und definieren Sie ihn ibaction

Ihre .m-Datei sieht dann so aus

    - (IBAction)hideKeyboardGesture:(id)sender {
    NSArray *windows = [UIApplication sharedApplication].windows;
    for(UIWindow *window in windows) [window endEditing:true];
    [[UIApplication sharedApplication].keyWindow endEditing:true];
}

Es hat bei mir funktioniert

0voto

M. Ryan Punkte 6824

Sie können rekursiv durch die Unteransichten iterieren, ein Array aller UITextFields speichern und dann eine Schleife durch sie ziehen und sie alle zurücktreten lassen.

Das ist nicht wirklich eine gute Lösung, vor allem wenn Sie viele Unteransichten haben, aber für einfache Anwendungen sollte es reichen.

Ich löste dies in eine viel kompliziertere, aber viel mehr performant Weg, aber mit einem Singleton/Manager für die Animation-Engine meiner app, und jedes Mal ein Textfeld wurde der Responder, ich würde es zuweisen, eine statische, die erhalten würde gefegt (zurückgetreten) basierend auf bestimmte andere Ereignisse ... seine fast unmöglich für mich in einem Absatz zu erklären.

Seien Sie kreativ, ich habe nur 10 Minuten gebraucht, um mir das für meine App zu überlegen, nachdem ich diese Frage gefunden hatte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X