Das iPad verfügt nicht über eine "Numpad" -Tastatur wie das iPhone / der iPod.
Ich möchte herausfinden, wie ich die Tastatur des Benutzers so einschränken kann, dass nur die Werte 0 bis 9 akzeptiert werden.
Ich würde mir vorstellen, UITextFields "shouldChangeCharactersInRange" zu verwenden, aber ich weiß nicht, wie ich es am besten implementieren kann.
ios
ipad
cocoa-touch
uitextfield
uikeyboard
Demasterpl
quelle
quelle
Antworten:
Auf diese Weise können Sie das Problem in einem SSN-Überprüfungsfeld behandeln. Sie können die maximale Länge ändern und
if
bei Bedarf die Anweisungsprüfung für den Tastaturtyp entfernen .Es gibt auch eine Logik zum Unterdrücken der Warnungen für die maximale Länge, wenn der Benutzer tippt, anstatt Daten einzufügen.
Im Kontext dieses Codes gibt
presentAlert()/presentAlert:
es nur einige grundlegende Funktionen, die eineUIAlertController
(oder eine Legacy-UIAlertView
) Funktion unter Verwendung der übergebenen Nachrichtenzeichenfolge darstellen.Swift 5
Ziel c
quelle
Mit diesem Code können Sie nur Zahlen in textField zulassen.
Stellen Sie zuvor den Delegaten für textField ein
oder
Verwenden Sie diesen Code, um nur Ziffern für textField zuzulassen
quelle
[string intValue]
0 für @ "0" zurückgegeben -if ([string intValue])
wird also für @ "0" nicht erfüllt. Besser zu benutzenif ([string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound)
@".".intValue
ist 0. Und@"0".intValue
ist auch 0.0
) eingeben .Versuchen Sie dies, um Probleme beim Löschen von Textfeldern zu vermeiden
Swift 3.0
Swift 4.0
quelle
return guard CharacterSet(charactersIn: "0123456789").isSuperset(of: CharacterSet(charactersIn: string))
Sehr spezifische Schritte für Swift-Code
Sie können eine Logik bereitstellen, die die Eingabe des Textfelds in die
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
Methode einschränkt , indem Sie dasUITextFieldDelegate
Protokoll implementieren .Aus Gründen der Übersichtlichkeit wird bei diesen Schritten davon ausgegangen, dass Ihr Storyboard einen View Controller mit einem Textfeldobjekt enthält , das nur Ziffern akzeptieren sollte.
Erstellen Sie eine benutzerdefinierte Klasse für den erweiterten View Controller
UIViewController
. Stellen Sie sicher, dass sich die Szene in Ihrem Storyboard auf die benutzerdefinierte Klasse bezieht, indem Sie den benutzerdefinierten Klassenwert im Identitätsinspektor von Xcode festlegen.Erstellen Sie einen Ausgang aus dem Textfeld Ihrer Szene zu Ihrem benutzerdefinierten View Controller.
Wenden Sie das
UITextFieldDelegate
Protokoll in Ihrem benutzerdefinierten Ansichtscontroller an.viewDidLoad
Weisen Sie in der Methode Ihres benutzerdefinierten Ansichtscontrollers den Delegaten Ihres Textfelds Ihrer benutzerdefinierten Ansichtscontrollerklasse zu.Fügen Sie die
UITextFieldDelegate
s‘func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
Methode.Nachdem Sie Ihren benutzerdefinierten Ansichtscontroller
numberField
im vorherigen Schritt zum Delegaten gemacht haben, wird diese Methode jedes Mal aufgerufen, wenn ein Benutzer ein Zeichen in das Textfeld eingibt. Wenn Ihre Methode zurückgibttrue
, bleibt das Zeichen im Textfeld. Wenn Ihre Methode zurückgibt, bleibtfalse
das Zeichen nicht im Textfeld.Der
string
Parameter ist das vom Benutzer eingegebene Zeichen. Wenn dasstring
Zeichen in ein konvertiert werden kann,Int
liegt es zwischen 0 und 9; Andernfalls handelt es sich um ein Nicht-Zahlenzeichen.(Siehe unten für den Vollbild-Controller-Code.)
Beispiel View Controller mit nur Ziffern Textfeld
Beispiel View Controller mit einem dezimalen Textfeld
Wenn Sie eine Dezimalzahl unterstützen möchten, nutzen Sie
NSNumberFormatter
. Die Unterschiede finden Sie in den Codekommentaren.quelle
return string.toInt() != nil
Lief wie am Schnürchen. Vielen Dank!return Int(string) != nil
return string == "" || Int(string) != nil
quelle
Ich habe das angewendet und es funktioniert !!
quelle
if (character < 48) return NO; // 48 unichar for 0 if (character > 57) return NO; // 57 unichar for 9
durchif ((character < 48 || character > 57) && character != 46)
Ich würde zusätzlich empfehlen, Siecharacter
mit einer hexadezimalen Darstellung der Zahlen zu vergleichen , da Hexadezimalzahlen unter diesen Umständen am häufigsten verwendet werden. Dhif ((character < 0x30 || character > 0x39) && character != 0x2E)
quelle
quelle
In Swift:
quelle
schnell 5
Sie können jetzt nur noch auf 1234567890 tippen
quelle
Halten Sie unterschiedliche Präsentationsdaten von der internen Darstellung fern. Es gibt einen einfacheren Weg. Lass
NSNumberFormatter
den Job machen:quelle
Wenn Sie mein Spezifikationsmuster verwenden, sieht der Code so aus
quelle
Ich habe die Antwort von @ iDev geändert, um für Digitale und "." Zu arbeiten:
quelle
schnell 3
quelle
Verwenden Sie diesen Code:
quelle