2017-01-13 5 views
2

ich UITextView bin mit und implementiert, um die DelegatfunktionUITextView Delegierten mehrmals aufrufen

var count = 0 
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    print(text) 
    count += 1 
    print(count) 
    return true 
} 

Probe

enter image description here

Wenn ich die Text von der Tastatur auswählen, ruft shouldChangeTextInRange Delegierten zweimal.

  1. Warum dieser Delegierte zweimal anruft?
  2. Warum geschieht dies mit Texterkennung allein
+0

Versuchen Sie, die Anzahl der Zeichen zu zählen? Wenn dies der Fall ist, wird das nicht funktionieren, weil das Löschen eines Zeichens die Zahl erhöht, anstatt es zu verringern. – redent84

+0

count ist, um zu sehen, wie oft der Delegierte aufgerufen wird – Suresh

+0

Was ist das Problem dann? Warum wird in Ihrer Anwendung zweimal ein Problem genannt? – redent84

Antwort

0

Die Textansicht ruft diese Methode auf, wenn der Benutzer ein neues Zeichen oder löscht ein vorhandenes Zeichen. Die Implementierung dieser Methode ist optional. Sie können diese Methode verwenden, um Text zu ersetzen, bevor er an den Textansichtsspeicher übergeben wird. Beispielsweise könnte eine Rechtschreibprüfung diese Methode verwenden, um ein falsch geschriebenes Wort durch die richtige Schreibweise zu ersetzen.

von apple docs diesen Code https://developer.apple.com/reference/uikit/uitextviewdelegate/1618630-textview

2

Bitte verwenden. Es wird gut funktionieren und hoffen, dass es perfekt mit Ihrer bestehenden Logik funktioniert.

var count = 0 
    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
     print(text) 
     let trimmedString = text.trimmingCharacters(in: .whitespaces) 
     if(trimmedString.characters.count != 0){ 
     count += 1 
     print(count) 
     } 
     return true 
    } 

Antwort für beiden Fragen 1 und 2 ist Wenn Sie Text aus dem Text auswählen. Zuerst hängt es Wort an dann fügt es ein Leerzeichen an. Aus diesem Grund wird delegate zweimal aufgerufen.

+0

und wenn der Textview 'Text' oder' attributedText' Eigenschaft innerhalb dieses Delegatmethode modifiziert wird dann heißt dreimal – Shyam

Verwandte Themen