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

时间:2015-08-19 14:56:36

标签: ios swift cocoa-touch uitextview

我以编程方式创建了一个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)

并在委托函数中:

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()
    }
}

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

if textView.text == nil

就像这样:

if textView.text == ""

没有检测到空行,即使是nil比较也没有在添加和删除一些字符后检测到没有文本。

因此,当用户输入文本时没有问题,当用户删除所有文本时,占位符返回,但如果添加一行或更多行而没有任何文本,则对比空白不是真的,我需要一个检测我没有文本的方法以及添加的行没有文本,因为Swift .isEmpty中新引入的没有检测到添加的空行,也没有检测到任何其他比较。

如何检测String中的空行?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

"快速而肮脏"发布的代码版本,没有扩展字符串:

func textViewDidEndEditing(textView: UITextView) {

    let myAwesomeDescription = textView.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSe‌​t())

    if myAwesomeDescription == "" {

        //user did not modify empty box or text only consisted of space/newline characters, reset placeholder text and placeholder textColor
        textView.text = "Agregue una descripción..."
        textView.textColor = UIColor.lightGrayColor()

    } else {

    //textView holds a valid string, do stuff

    }

}

myAwesomeDescription有什么作用?我们提到了一个很棒的NSHipster article

  

剥离空白

     

NSString -stringByTrimmingCharactersInSet:是一个   你应该明白的方法。它最常通过NSCharacterSet   + whitespaceCharacterSet或+ whitespaceAndNewlineCharacterSet,以删除字符串输入的前导和尾随空格。

     

值得注意的是,此方法仅剥离第一个和最后一个   指定集合中连续的字符序列。

话虽这么说,这不仅有助于我们处理具有不必要的领先或跟随空格/换行符的字符串,而且还有"空"在大多数定义中,这意味着String只是空格/换行符。