2014-01-21 7 views
10

Es gibt many posts über das Benachrichtigen des Benutzers, wenn sich der Tastaturtyp von Dingen wie dem Nummernblock zu Standard ändert. Diese Frage ist zu wissen, wann der Benutzer klickt tatsächlich auf dem [123] oder der [ABC]-Taste auf der Tastatur Standard .. im Grunde Ich möchte wissen, wenn dieser Bildschirmwie zu erkennen, wenn der iOS-Standardtastaturtyp von Text zu Zahlen wechselt

enter image description here

Änderungen in diesem Fenster

enter image description here

versucht, dies:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    NSLog(@"::::::: this is text field type %d", searchBar.keyboardType); 

natürlich geben Sie mir immer 0 das ist der Standard-Schlüsseltyp .. da es angenommen wird, dass beide vom gleichen Tastaturtyp sind.

Antwort

0

Konfigurieren der Tastatur für Textobjekte Sie konfigurieren die Attribute der Tastatur direkt über die Textobjekte Ihrer App. Die Klassen UITextField und UITextView entsprechen dem UITextInputTraits-Protokoll, das die Eigenschaften für die Konfiguration der Tastatur definiert. Wenn diese Eigenschaften programmgesteuert oder im Inspektorfenster von Interface Builder festgelegt werden, zeigt das System die Tastatur des angegebenen Typs an.

@property(nonatomic) UIKeyboardType keyboardType 
+0

während ich immer noch viel Wert darin sehe, was du sagst .. es wäre noch klarer, wenn du uns einen Beispielcode zeigen oder uns auf eine Dokumentation verweisen könntest. – abbood

+0

Hier ist der Link, wo Sie für dimonds wenig graben können https://developer.apple.com/library/ios/documentation/uikit/reference/UITextInputTraits_Protocol/Reference/UITextInputTraits.html – Retro

0

Ich denke, es ist nicht möglich, Tastaturtyp Schalter zu erkennen. Vielleicht können Sie Ihr Problem erklären oder was möchten Sie erreichen, damit wir eine andere Problemumgehung für Ihr Problem finden können.

Grüße

0

Es API nicht Tastatur erfassen wird geändert: UITextField Klassenreferenz

Die Definition des keyboard Teil des UITextInputTraits Protokoll ist. Einstellen eines Tastaturtyps, z.B. ASCII, ist im Grunde die Standard-Tastatur, die den Buchstaben-Teil der Tastatur selbst zeigt. Wenn Sie keyboardType auf UIKeyboardTypeNumbersAndPunctuation setzen, erhalten Sie die gleiche Tastatur wie das ASCII-Zeichen, dass die Tastatur zuerst mit dem Zahlenteil der Tastatur angezeigt wird.

Zusammenfassend sind ASCII und die Zahlen und Interpunktions-Tastatur die gleichen, drei Bildschirmtastatur, die auf zwei verschiedene Arten dargestellt werden.

0

Sie können Änderungen am Tastaturtyp in textDidChange erkennen. Wenn ja, haben Benutzer auf der Tastatur-Taste auswählen und Sie können für eine UITextField keyboard Eigenschaft überprüfen:

Keyboard: UIKeyboardTypeNumberPad oder UIKeyboardTypeDefault

So können yo die aktuell eingeben, erfassen Tastatur Änderung speichern, und vergleichen Sie die neue Tastaturtyp mit dem ersten.

1

Ich stieß heute auf das gleiche Problem und war erstaunt, dass es keine Möglichkeit gibt, diese Änderung von einer Benachrichtigungs- oder Delegate-Methode zu erkennen, da ich denke, dass dies ein ziemlich häufiges Bedürfnis ist. Ich baue einen Multi-Feld-Text-Box-Eingang für die Erfassung eines PIN-Codes. Ich fahre automatisch nach Eingabe eines Wertes auf die nächsten/vorherigen Felder und möchte nicht, dass die Tastatur jedes Mal, wenn ich zwischen Feldern umschalte, auf die Standardeinstellungen zurückwechselt. Ich kam mit dieser Lösung (Hinweis: Dies löst es nicht perfekt, weil es erfordert, dass der Benutzer etwas eingibt, aber löst es für ähnliche Bedürfnisse dieser Pin-Ansicht).

Ich habe eine benutzerdefinierte Ansicht genannt MyPinView, wobei diese Ansicht hat var

var keyBoardType = UIKeyboardType.alphabet

und eine Reihe von UITextFields

var pinFields = [UITextField]()

, die wie so angelegt wird. enter image description here

Für eine vereinfachte Version, ich werde nicht alle durch die Details der Umgang mit Rand Fällen gehen die shouldChangeCharactersInRange erfordern umgesetzt werden und wird mit meinem Event-Handler-Implementierung bleiben.

Im Grunde müssen Sie sehen, welcher Text eingegeben wurde und bestimmen, welche Tastatur beim Vorrücken von Feldern angezeigt wird (meins unterstützt nur Zahlen und Buchstaben, die mit der abc/123-Taste umgeschaltet werden, damit ich Emoji und andere Typen ignorieren kann).

// MARK: UITextField Event 
func textFieldDidChange(textField: UITextField) { 
    // If the user typed one character, move to the next cell. 
    if (textField.text?.count == 1) { 
     let index = pinFields.index(of: textField) 
     textField.resignFirstResponder() 
     if (pinFields.count > index! + 1) { 
      let pinField = pinFields[index! + 1] 
      self.updateKeyboardTypeForString(input: textField.text) 
      pinField.keyboardType = self.keyBoardType 
      pinField.becomeFirstResponder() 
     } 
    } // If they deleted the character move to previous cell 
    else if (textField.text?.count == 0) { 
     let index = pinFields.index(of: textField) 
     if (index! - 1 >= 0) { 
      let pinField = pinFields[index! - 1] 
      self.updateKeyboardTypeForString(input: pinField.text) 
      pinField.keyboardType = self.keyBoardType 
      pinField.becomeFirstResponder() 
     } 
    } 
} 

// MARK: - Keyboard Type Helper 
func updateKeyboardTypeForString(input:String?) { 
    let letters = NSCharacterSet.letters 
    let digits = NSCharacterSet.decimalDigits 
    let pinText = input == nil ? "" : input 
    for uniScalar in pinText!.unicodeScalars { 
     if letters.contains(uniScalar) { 
      self.keyBoardType = UIKeyboardType.alphabet 
     } else if digits.contains(uniScalar) { 
      self.keyBoardType = UIKeyboardType.numbersAndPunctuation 
     } 
    } 
} 

Damit können Sie verfolgen, wo die Tastatur zuletzt aufgehört hat. Wenn Ihre Textfelder mehr als ein Zeichen zulassen, müssen Sie offensichtlich nur das letzte Zeichenzeichen übernehmen und an updateKeyboardTypeForString übergeben. Der Hauptfall, in dem dies nicht hilft, ist das Beibehalten des Tastaturstatus zwischen Eingabefeldern, in denen der Benutzer die Tastatur umgeschaltet hat, aber nichts eingegeben hat. Insgesamt hilft dies jedoch, diese Art von Szenario besser nutzbar zu machen.

Hoffe das hilft, fröhliche Programmierung.