2017-05-22 3 views
0

ich eine Textview, die für Leerraum testet die Teilnehmer unter Verwendung vonSwift IOS -Wie nur Rückkehr zu testen „ n“ Schlüsselzeichen in einem Textview eingegeben werden

fileprivate let whitespace = CharacterSet.whitespaces 

func textViewDidChange(_ textView: UITextView) { 
     if textView.text!.trimmingCharacters(in: whitespace) == ""{ 
      sendButton.isEnabled = false 
     }else{ 
      sendButton.isEnabled = true 
     } 
    } 

func textViewDidEndEditing(_ textView: UITextView) { 
     if textView.text!.trimmingCharacters(in: whitespace) == ""{ 
      sendButton.isEnabled = false 
      sendButton.layer.backgroundColor = UIColor.lightGray.cgColor 
     }else{ 
      sendButton.isEnabled = true 
      sendButton.layer.backgroundColor = UIColor.red.cgColor 
     } 
    } 

Wenn der Benutzer alle Räume gelangt die dem sendButton wird niemals aktiviert. Wenn der Benutzer jedoch 1 oder mehr Returnschlüsselzeichen "\ n" eingibt, wird er immer noch als Zeichen erkannt und der sendButton wird aktiviert.

In den Textview Delegierten shouldChangeTextInRange, textViewDidChange und textViewDidEndEditing ich versuchte, indem textView.text! == "\n":

fileprivate let whitespace = CharacterSet.whitespaces 

func textViewDidChange(_ textView: UITextView) { 
     if textView.text!.trimmingCharacters(in: whitespace) == "" || textView.text! == "\n"{ 
      sendButton.isEnabled = false 
     }else{ 
      sendButton.isEnabled = true 
     } } 

func textViewDidEndEditing(_ textView: UITextView) { 
     if textView.text!.trimmingCharacters(in: whitespace) == "" || textView.text! == "\n"{ 
      sendButton.isEnabled = false 
     }else{ 
      sendButton.isEnabled = true 
     } 
    } 

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
     if textView.text!.trimmingCharacters(in: whitespace) == "" || textView.text! == "\n"{ 
      sendButton.isEnabled = false 
     }else{ 
      sendButton.isEnabled = true 
     } 
     return true 
    } 

Die Taste wird nach wie vor aktiviert.

Wie bekomme ich die gleiche Antwort wie nur für Whitespace?

+1

ändern 'Characterset.whitesspaces' zu' .whitespacesAndNewlines'. – rmaddy

+0

@rmaddy danke, ich versuche es gerade –

+0

@rmaddy Ich versuchte, wenn textView.text! .trimmingCharacters (in: Characterset.whitespacesUndNewLines) == "" in der Delegierten sentChangeTextInRange und textViewDidChnage, aber es wird weiterhin aktiviert –

Antwort

1

Denken Sie darüber nach, was Sie hier tun:

if textView.text!.trimmingCharacters(in: whitespace) == "" || textView.text! == "\n" { 

Split, die in Stücke:

// Part 1 - get the text from textView, and remove whitespace characters 
    textView.text!.trimmingCharacters(in: whitespace) 

    // Part 2 - get the text from textView 
    textView.text! 

    IF "Part 1" == "" 
    OR 
    IF "Part 2" == "\n" 

Also, was passiert, wenn Textview 4 Leerzeichen enthält und einen Wagenrücklauf?

Teil 1 nicht wahr ist, weil die Räume Strippen Sie mit „\ n“ verlässt

Teil 2 nicht wahr ist, weil es „(vier Leerzeichen) \ n“

Das sollte erklären, warum Ihr aktueller Code bekommt nicht das, was Sie erwarten.

jedoch als @rmaddy vorgeschlagen, dies sollte es tun:

func textViewDidChange(_ textView: UITextView) { 
    let str = textView.text.trimmingCharacters(in: .whitespacesAndNewlines) 
    if str == "" { 
     sendButton.isEnabled = false 
    } else { 
     sendButton.isEnabled = true 
    } 
} 
+0

danke für die Hilfe. Ich verließ mein Haus und ich habe keine CPU mit mir. Wenn ich nach Hause komme, gehe ich über das, was du gesagt hast, und teste es aus. Sehr geschätzt! –

+0

muchas gracias! es hat funktioniert :) Ich verstehe Ihre Kommentare. Ich habe nicht darüber nachgedacht, was passiert, wenn sie mit Leerzeichen und dem Return-Schlüssel eingeben. Guter Gedanke –

Verwandte Themen