2013-04-26 14 views
7

Ich habe eine benutzerdefinierte Ansicht (NotifyView) auf UIWindow mit einer Schaltfläche entlassen (die es aus entfernen). Diese Ansicht wird hinzugefügt, wenn eine PUSH-Benachrichtigung eingeht didReceiveRemoteNotification Es gibt mehrere Fälle, in denen ich auf einem beliebigen Bildschirm sein könnte, und meine Tastatur ist UP über UITextfield/UITextview. In diesem Stadium, wenn ein Stoß kommt, wird die NotifyView auf UIWindow hinter der Tastatur hinzugefügt. Ich möchte die Tastatur zurücktreten, sobald die PUSH so dass empfangen wird, denn ich konnte:Tastatur vom Bildschirm entfernen, ohne resignFirstResponder anrufen

  • Posten Mitteilung mit NSNotificaitonCenter alle Textfelder/Textviews zum Rücktritt (wenn jemand firstResponder). Dazu muss ich in allen Controllern den aktiven Zeiger auf das gerade aktive Textfeld/Textview halten.

  • machen Sie eine Variable in AppDelegate und weisen Sie ihr und auf PUSH die aktiven Textfelder/Textansichten zu und auf PUSH resignFirstResponder.

Beide Lösungen erfordern würde Änderungen für alle Controller Code machen, und ich bin auf der Suche nach etwas allgemeineren wie:

  • könnte eine Möglichkeit da sein, durch die ich einfach die Tastatur aus dem entfernen könnte Bildschirm beim Empfang PUSH
  • oder ich könnte den aktuellen FirstResponder der Anwendung holen und explizit zurücktreten.

Dies könnte generische Lösungen sein.

Es wäre wirklich hilfreich, wenn jemand diesen Gedankenprozess erleichtern könnte oder jemand eine sofortige Lösung für diesen Fall hätte.

+0

duplizieren? http://StackOverflow.com/Questions/1823317/get-the-current-first-Responder-without-using-a-private-api – rdurand

Antwort

6

können Sie die Methode verwenden, unter

[[[UIApplication sharedApplication] keyWindow] endEditing:YES] 
+1

das funktionierte perfekt für mich ... danke ... – samfisher

4

Versuchen Sie dieses, für mich funktioniert es gut [yourView endEditing:YES]

+0

Ich bin auf der Suche nach einem weiteren Schritt generische wie für diesen habe ich verfolgen meine aktuelle Ansicht, um dies zu nennen. – samfisher

+0

Wenn diese Methode aufgerufen wird, wird 'resitFirstResponder' aufgerufen, wenn in der Ansicht UITextField angezeigt wird. https://developer.apple.com/reference/uikit/uiview/1619630-endediting –

0

Das Problem ist es, wenn Sie den Fokus zurück geben möchten.

Ich habe jedes Textfeld und Caching, die die neuesten ist, als zuhören implementiert. Wenn Sie dann nach dem Wiederherstellungsstatus nur noch diesen (nach dem Drücken) zurückgeben, müssen Sie sich darauf konzentrieren.

0

die Sie interessieren in Delegatmethode ...

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    [self.view endEditing:YES]; // added this in for case when keyboard was already on screen 
    [self editStartDate:textField]; 
    return NO; 
} 
Verwandte Themen