Auf dem Nummernblock befindet sich keine Schaltfläche "Fertig". Wie kann ich den Nummernblock verschwinden lassen, wenn ein Benutzer die Eingabe numerischer Informationen in ein Textfeld abgeschlossen hat?
Ich könnte mit der Standardtastatur eine Schaltfläche "Fertig" erhalten, aber dann müssten Benutzer zu den Zifferntasten wechseln, um Zahlen einzugeben. Gibt es eine Möglichkeit, eine Schaltfläche "Fertig" auf dem Nummernblock anzuzeigen?
ios
iphone
user-input
Chilly Zhong
quelle
quelle
Hier ist eine Anpassung für Ludas Antwort für Swift:
In die Deklaration Ihrer UIViewController-Unterklasse setzen
in ViewDidLoad setzen:
und fügen Sie die Funktionen hoopla und hoopla hinzu (Sie können auch andere Namen auswählen, ändern Sie einfach die Selektornamen in ViewDidLoad entsprechend
quelle
UIBarButtonItemStyle.Bordered
ist seit iOS 8.0 veraltet.UIBarButtonItemStyle.Plain
wird stattdessen vorgeschlagen.Der Trick, den ich gesehen habe, besteht darin, eine benutzerdefinierte transparente Schaltfläche in der Größe der gesamten Ansicht zu erstellen und dann in der Klickmethode das Textfeld als Ersthelfer zurücktreten zu lassen. Der Benutzer kann also auf eine beliebige Stelle außerhalb des Felds klicken, um die Tastatur zu schließen.
quelle
Eine Swift 3- Lösung mit einer Erweiterung. Ideal, wenn
UITextField
Ihre App mehrere numerische Objekte enthält, da Sie flexibel entscheiden könnenUITextField
, ob beim Tippen auf Fertig oder Abbrechen eine benutzerdefinierte Aktion ausgeführt werden soll.Anwendungsbeispiel mit den Standardaktionen:
Anwendungsbeispiel mit einer benutzerdefinierten Aktion " Fertig" :
quelle
Unten finden Sie eine Überarbeitung von Ludas Antwort mit den folgenden Änderungen:
Die Zubehöransicht wird automatisch an die Breite des Anwendungsrahmens angepasst
Die veraltete Konstante
UIBarButtonItemStyleBordered
wird vermiedenDie Schaltfläche "Fertig" wird als a instanziiert
UIBarButtonSystemItemDone
Derzeit ist die Schaltfläche "Fertig" in der Zubehöransicht zentriert. Sie können es links oder rechts positionieren, indem Sie das Leerzeichen auf der entsprechenden Seite löschen.
Ich habe die Schaltfläche "Abbrechen" weggelassen, da die Standardtastatur auch keine hat. Wenn Sie eine Schaltfläche "Abbrechen" möchten, empfehlen wir Ihnen, diese als zu instanziieren
UIBarButtonSystemItemCancel
und sicherzustellen, dass Sie den ursprünglichen Wert in Ihrem Textfeld nicht verwerfen. Das in Ludas Antwort implementierte Verhalten "Abbrechen", bei dem der Wert mit einer leeren Zeichenfolge überschrieben wird, entspricht möglicherweise nicht Ihren Wünschen.Weitere Informationen zum Erstellen von Zubehöransichten finden Sie in der Apple-Dokumentation zu benutzerdefinierten Ansichten für die Dateneingabe . Sie sollten wahrscheinlich auch die Referenzseiten zu UIToolbar und UIBarButtonItem konsultieren .
quelle
[UIScreen mainScreen].applicationFrame
ist in iOS 9 veraltet. Verwenden Sie[UIScreen mainScreen].bounds
Die Lösung in UIKeyboardTypeNumberPad und die fehlende Eingabetaste funktionieren hervorragend, jedoch nur, wenn auf dem Bildschirm keine anderen Textfelder ohne Nummernblock angezeigt werden.
Ich nahm diesen Code und verwandelte ihn in einen UIViewController, den Sie einfach in Unterklassen unterteilen können, damit die Nummernblöcke funktionieren. Sie müssen die Symbole über den obigen Link erhalten.
NumberPadViewController.h:
und NumberPadViewController.m:
Genießen.
quelle
Hier ist der neueste Code. Fügen Sie einfach #import "UIViewController + NumPadReturn.h" in Ihren viewController ein.
Hier ist die .h
Und sie
quelle
Eine viel einfachere Lösung
quelle
Wenn Sie mehrere numerische Felder haben, empfehle ich, UITextField in eine Unterklasse zu unterteilen, um ein NumericTextField zu erstellen, das immer eine numerische Tastatur mit einer Schaltfläche "Fertig" anzeigt. Verknüpfen Sie dann einfach Ihre numerischen Felder mit dieser Klasse im Interface Builder, und Sie benötigen keinen zusätzlichen Code in einem Ihrer View Controller. Das Folgende ist die Swift 3.0-Klasse, die ich in Xcode 8.0 verwende.
Swift 4.2
quelle
Ich fand die Antwort von @ user1258240 ziemlich präzise, da dies nicht so einfach ist wie das Festlegen einer
returnKeyType
Eigenschaft.Ich wollte nur meinen eigenen "wiederverwendbaren" Ansatz dazu beitragen:
quelle
SWIFT 3.0 Ein anderer Geschmack, der Teile einiger vorheriger Antworten verwendet.
quelle
Ich beschreibe eine Lösung für iOS 4.2+ hier aber die Schaltfläche , nachdem die Tastatur angezeigt wird. Es ist nicht schrecklich, aber auch nicht ideal.
Die in der oben verlinkten Frage beschriebene Lösung beinhaltet eine elegantere Illusion, die Schaltfläche zu schließen, wobei ich die Schaltfläche ausblende und vertikal verschiebe, um den Eindruck zu erwecken, dass die Tastatur und die Schaltfläche zusammen geschlossen werden.
quelle
Der einfachste Weg ist:
Erstellen Sie eine benutzerdefinierte transparente Schaltfläche und platzieren Sie sie in der linken unteren Ecke, in der sich der
CGSize
leere Bereich befindetUIKeyboardTypeNumberPad
. Schalten Sie diese Schaltfläche in textFieldbecomeFirstResponder
bzw. beim Klicken auf die Schaltfläche ein ( ein- / ausblenden) .quelle
Hier ist die einfachste Lösung, die mir begegnet ist. Ich habe dies aus dem Buch Beginning iOS 5 Development gelernt.
Unter der Annahme , das Nummernfeld wird aufgerufen
numberField
.In
ViewController
den folgenden Verfahren:In
ViewController.m
den folgenden Code:Gehen Sie zurück zur
nib
Datei.Utilities
Pfanne öffnen .Identity inspector
unterUtilities
Pfanne.View
(in der NIB-Datei). Stellen Sie sicher, dass Sie keines der Elemente in der Ansicht angeklickt haben. Zur Verdeutlichung sollten Sie UIView unterClass
in sehenIdentity inspector
.Connection Inspector
.Touch Down
den Pfeil auf dasFile Owner
Symbol und legen Sie ihn dort ab . (Zu Ihrer Information ... Das Symbol für den Dateibesitzer wird links von angezeigtView
und als hohler Würfel mit gelbem Rahmen angezeigt .)closeKeyboard
.Wenn Sie jetzt auf eine beliebige Stelle im Hintergrund von klicken
View
, sollten Sie die Tastatur schließen können.Ich hoffe, dies hilft Ihnen bei der Lösung Ihres Problems. :-)
quelle
Ich habe Bryans Lösung so modifiziert, dass sie etwas robuster ist, damit sie gut mit anderen Tastaturtypen funktioniert, die in derselben Ansicht angezeigt werden können. Es wird hier beschrieben:
Erstellen Sie eine Schaltfläche FERTIG auf dem iOS-Nummernblock UIKeyboard
Ich würde versuchen, es hier zu erklären, aber das meiste davon ist Code zum Anschauen, der hier nicht leicht passt
quelle
Wenn Sie die Anzahl der einzugebenden Nummern im Voraus kennen (z. B. eine 4-stellige PIN), können Sie diese nach 4 Tastendrücken gemäß meiner Antwort auf diese ähnliche Frage automatisch schließen:
Nummernblock entlassen
In diesem Fall ist keine zusätzliche Schaltfläche "Fertig" erforderlich.
quelle
Wir können die Lösung "Benutzer woanders berührt" auch noch einfacher machen, wenn wir nur die Ansicht unseres View Controllers anweisen, die Bearbeitung zu beenden:
... unter der Annahme, dass "Berühren an anderer Stelle die Tastatur schließt" das gewünschte Verhalten auch für andere bearbeitbare Felder in der Ansicht ist.
quelle
Für Swift 2.2 benutze ich dies
quelle
Alle Implementierungen zum Suchen der Tastaturansicht und zum Hinzufügen der Schaltfläche "Fertig" in der 3. Zeile (daher beträgt die Tastaturhöhe von button.y = 163 b / c 216) sind fragil, da iOS die Ansichtshierarchie ständig ändert. Zum Beispiel funktioniert keiner der oben genannten Codes für iOS9.
Ich denke, es ist sicherer, nur die oberste Ansicht in [[[UIApplication sharedApplication] -Fenster] lastObject] zu finden und einfach die Schaltfläche in der unteren linken Ecke hinzuzufügen, doneButton.frame = CGRectMake (0, SCREEN_HEIGHT-53, 106 , 53); // Porträtmodus
quelle
Swift 2.2 / Ich habe die Antwort von Dx_ verwendet. Ich wollte diese Funktionalität jedoch auf allen Tastaturen. Also habe ich in meine Basisklasse den Code eingefügt:
Rufen Sie dann einfach addDoneButtonForTextFields auf self.view.subviews in viewDidLoad (oder willDisplayCell, wenn Sie eine Tabellenansicht verwenden) auf, um allen Tastaturen die Schaltfläche Fertig hinzuzufügen.
quelle