在Swift中的UITextView中检测空行和缺少文本

Jua*_*ero 1 cocoa-touch uitextview ios swift

我以编程方式创建了一个UITextView,并添加了一个占位符,如下所示:

    //textView
    textView.frame = CGRectMake(viewSize.width * 0.05, contentView.frame.height - viewSize.width * 0.05, viewSize.width - viewSize.width * 0.05 * 2, -viewSize.height * 0.220833)
    self.textView.delegate = self
    self.textView.text = "Agregue una descripción..."
    self.textView.textColor = UIColor.lightGrayColor()
    self.textView.autocorrectionType = UITextAutocorrectionType.No
    self.textView.layer.cornerRadius = 6
    self.view.addSubview(textView)
Run Code Online (Sandbox Code Playgroud)

并在代表函数中:

func textViewDidBeginEditing(textView: UITextView) {

    if textView.textColor == UIColor.lightGrayColor() {
        textView.text = ""
        textView.textColor = UIColor.blackColor()
    }
}


func textViewDidEndEditing(textView: UITextView) {
    if textView.text.isEmpty {

        textView.text = "Agregue una descripción..."
        textView.textColor = UIColor.lightGrayColor()
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试将字符串文本检查为nil:

if textView.text == nil
Run Code Online (Sandbox Code Playgroud)

像这样:

if textView.text == ""
Run Code Online (Sandbox Code Playgroud)

没有检测到空行,甚至在添加和删除一些字符后,nil比较没有检测到文本的缺失.

因此,当用户输入文本时不存在问题,而当用户删除所有文本占位符回来,但如果你新增的线条,更没有任何文字,空的比较是不正确的,我需要一种方法来检测我没有文字,也加入不具有文本行,因为斯威夫特新引进的.isEmpty未检测空行补充说,也没有任何其他的比较一样.

如何检测String中的空行?

mat*_*att 6

问问自己,文本是否仅由NSCharacterSet中的whitespaceAndNewlineCharacterSet字符组成(或者在你的脑海中构成空虚的任何字符 - 也许你所追求的是newlineCharacterSet).最简单的方法是取它invertedSet并调用rangeOfCharacterFromSet-如果结果是{NSNotFound, 0}(SWIFT nil),该文唯一的空白字符组成.

extension String {
    var isBlank : Bool {
        let s = self
        let cset = NSCharacterSet.newlineCharacterSet().invertedSet
        let r = s.rangeOfCharacterFromSet(cset)
        let ok = s.isEmpty || r == nil
        return ok
    }
}

"howdy".isBlank // false
"".isBlank // true
"\n\n".isBlank // true
Run Code Online (Sandbox Code Playgroud)