我以编程方式创建了一个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中的空行?
答案 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.whitespaceAndNewlineCharacterSet())
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只是空格/换行符。