2014-09-16 6 views
31

Gibt es eine Möglichkeit, die Emoji-Tastatur in iOS 8 nicht mehr anzuzeigen? Es ist nicht in Numpad und sicheren Text verfügbar, aber für E-Mail ist es da. Wenn es nicht möglich ist, es zu deaktivieren, wie die Zeichenfolgenwerte aus dem Emoji abgerufen werden?Wie kann ich die iOS 8 Emoji-Tastatur deaktivieren?

+1

möglich Duplikat von [Wie die Emoji-Tastatur in iOS 7 deaktivieren?] (Http://stackoverflow.com/questions/24927351/ how-to-disable-the-Emoji-Tastatur-in-ios-7) –

Antwort

82

Versuchen Sie folgendes:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{   
    if ([textField isFirstResponder]) 
    { 
     if ([[[textField textInputMode] primaryLanguage] isEqualToString:@"emoji"] || ![[textField textInputMode] primaryLanguage]) 
     { 
      return NO; 
     } 
    } 
    return YES; 
} 

für weitere Informationen here sehen.

EDIT:

Sie Emoji aus Tastatur verstecken kann mit diesem Code:

txtField.keyboardType=UIKeyboardTypeASCIICapable; 

EDIT:

ausblenden Emoji Auswahl von Tastatur Builder verwenden.

enter image description here

+3

Ein weiterer Tipp: Sie können dies direkt von Xcode/Interface Builder einstellen. – BastiBen

+1

versteckt in IB ist nett. Ich mochte es. Vielen Dank. – Noundla

+1

Wenn Emoji aus einem anderen Textfeld kopiert wird, sollte diese Überprüfung durchgeführt werden, wenn nur ASCII-Zeichen akzeptiert werden string.canBeConvertedToEncoding (NSASCIIStringEncoding), oder wenn nur Emoji entfernt werden soll, kann diese Lib verwendet werden https://github.com/woxtu/NSString-RemoveEmoji –

16

Dies funktioniert auf iOS 7 und 8:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    // Disable emoji input 
    return [textField textInputMode] != nil; 
} 
+0

Das einzige, was tatsächlich funktioniert ohne veraltete Methoden! –

7

Die Lösung, die für mich gearbeitet:

self.texField.keyboardType = UIKeyboardTypeASCIICapable; 

Die Emoji-Tastatur wird nicht mit dem Keyboard zur Verfügung. .

Aber es ist obligatorisch, die Art von jeder char hinzugefügt in das Textfeld ein, um zu überprüfen, da der Benutzer ein Emoji aus anderen kopieren können dann fügen Sie ihn in

Hier ist, wie Sie dies tun könnte:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    return [text canBeConvertedToEncoding:NSASCIIStringEncoding]; 
} 

Seien Sie gewarnt, dass, wie ich in einem anderen Beitrag gelesen habe, dies auch verhindern könnte, dass der Benutzer eine Tastatur mit Sonderzeichen wie dem chinesischen verwendet.

+1

Dies sollte die akzeptierte Antwort sein, da Leute Emojis mit der akzeptierten Antwort über – tettoffensive

7

einfach die großen Antworten oben für jedermann zu aktualisieren, um die gleichen Fragen wie mir gegenüber:

  1. Eine E-Mail-Feld gesetzt als keyboard = .EmailAddress noch Emojis erlaubt
  2. Sie können mehr als eine Bedingung haben Sie wollen zu filtern
  3. Swift
  4. Prevent C & P

Dies ist, wie w e hat es geschafft:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    if !string.canBeConvertedToEncoding(NSASCIIStringEncoding){ 
     return false 
    } 
    //other conditons 
} 

bearbeiten

Okay, die Lösung mit NSASCIIStringEncoding nicht gut ist, wenn Sie bestimmte Zeichen für andere Sprachen zulassen möchten.

Einige mit NSASCIIStringEncoding blockiert Buchstaben:

  • Alle anderen Versionen von a: àáâäæãåā
  • Alle anderen Versionen von e: eeeeeee
  • Alle anderen Versionen von o: ôöòóœøōõ

Die Verwendung von NSASCIIStringEncoding ist keine gute Idee, wenn Sie Benutzer aus anderen Ländern unterstützen möchten!

Ich habe auch versucht NSISOLatin1StringEncoding:

  • Blockierte Versionen von a:
  • Blockierte Versionen von e: EEE
  • Blockierte Versionen von o: OEO

Das ist viel besser deutlich.

Ich habe auch versucht NSISOLatin2StringEncoding:

  • Blockierte Versionen von a: àæãåā
  • Blockierte Versionen von e: Eeee
  • Blockierte Versionen von o: òœøōõ

Schlimmer.

Edit2:

Die folgende scheint zu funktionieren:

extension String { 
    func containsEmoji() -> Bool { 
     for i in self.characters { 
      if i.isEmoji() { 
       return true 
      } 
     } 
     return false 
    } 
} 

extension Character { 
    func isEmoji() -> Bool { 
     return Character(UnicodeScalar(0x1d000)) <= self && self <= Character(UnicodeScalar(0x1f77f)) 
      || Character(UnicodeScalar(0x1f900)) <= self && self <= Character(UnicodeScalar(0x1f9ff)) 
      || Character(UnicodeScalar(0x2100)) <= self && self <= Character(UnicodeScalar(0x26ff)) 
    } 
} 

Nun rufen wir:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    if string.containsEmoji() { 
     return false 
    } 
    //other conditons 
} 
1

Diese rasche Version.

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { 
    if textView.isFirstResponder() { 
     if textView.textInputMode?.primaryLanguage == nil || textView.textInputMode?.primaryLanguage == "emoji" { 
      return false; 
     } 
    } 
    return true; 
} 
0

In Swift: - Es wird die zu vorbei an der Emojis in Ihrem Textview beschränken und einfach den Tastaturtyp fähig

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { 
    var result = Bool() 

      let disallowedCharacterSet1 = NSCharacterSet.symbolCharacterSet() 
      let replacementStringIsLegal = text.rangeOfCharacterFromSet(disallowedCharacterSet1) == nil 
      result = replacementStringIsLegal 


     let newLength = textView.text!.utf16.count + text.utf16.count - range.length 
     return newLength <= 300 && result // Bool 

} 
0

ich eine Antwort für Swift 3.0 wollte, die auf shouldChangeTextInRange ascii ändern funktionieren würde und kam mit dem folgenden, das ist wirklich einfach und kann mit jede Sprache, die Sie werfen es (ich schließe ein Foto mit chinesischen zu demonstrieren).

Die Guard-Anweisung packt den optionalen Text aus, und die return-Anweisung überprüft, ob ein Wert ausgegeben wurde, der die trimmingCharacters-Prüfung erfüllt. Wenn ein Wert vorhanden ist (was bedeutet, dass er nicht Teil der Eingabesprache der aktuellen Geräte ist), ist er nicht leer. Daher gibt die Methode false zurück und lässt das Zeichen nicht zu.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    guard let text = (textField.text as NSString?)?.replacingCharacters(in: range, with: string) else { 
     return true 
    } 

    return text.trimmingCharacters(in: CharacterSet.alphanumerics).isEmpty 
} 

Dies beruht auf Apples CharacterSet.alphanumerics, so gibt es keine Notwendigkeit, eine Liste der zugelassenen Zeichen zu pflegen und zu aktualisieren, es sei denn, Sie hinzufügen möchten oder Elemente entfernen.

enter image description here

Yay für sprachunabhängig!

Eine andere häufige Verwendung ist für E-Mail, da die Standard-E-Mail-Tastatur Emojis bietet. Ich fand mit einer kleinen Änderung, ich war in der Lage, Zeichen zu beschränken, was ich für eine E-Mail-Adresse wollte, um zu arbeiten.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    guard let text = (textField.text as NSString?)?.replacingCharacters(in: range, with: string) else { 
     return true 
    } 

    return text.trimmingCharacters(in: CharacterSet.alphanumerics).isEmpty || 
    !text.characters.filter { $0 == "@" || $0 == "." }.isEmpty 
} 
5

In swift 3,0

textField.keyboardType = .asciiCapable

2

Swift 3.1 Lösung

// MARK: - Text Field Delegate 

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
     return textField.textInputMode != nil 
    } 
0

Obwohl die Frage Super alt ist, 012.Ich war vor dem gleichen Problem und konnte es durch die Zeit, die von diesem kleinen Trick geladen Diese Seite beheben:

wählen Sie einfach „ASCII Capable“ oder „Zahlen und Satzzeichen“ in Interface Builder Xcode 8.2.1

enter image description here enter image description here

Ausgang ist keine Emoji-Tastatur = D

enter image description here

Ich bin sicher, dass es jemanden helfen wird =)

+0

kopieren/einfügen können. Bitte fügen Sie die [gleiche Antwort zu mehreren Fragen] nicht hinzu (http://meta.stackexchange.com/questions/104227/is -it-acceptable-to-add-a-duplicate-Antwort-zu-mehreren-Fragen). Beantworten Sie die beste Antwort und markieren Sie den Rest als Duplikate, sobald Sie genug Reputation erreicht haben. Wenn es sich nicht um ein Duplikat handelt, passen Sie den Beitrag an die Frage an und markieren Sie ihn für die Rückgängigmachung. –