Swift iOS - 如何仅测试在 TextView 中输入的 Return "\n" 关键字符
Swift iOS -How to test for only Return "\n" key character being entered inside a TextView
我有一个使用委托
测试白色 space 的 textView
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
}
}
如果用户输入全部 space,则 sendButton 永远不会启用。但是,如果用户输入 1 个或多个 return 个关键字符“\n”,它仍会被识别为一个字符,并且 sendButton 会启用。
在 textView 委托 shouldChangeTextInRange
、textViewDidChange
和 textViewDidEndEditing
中,我尝试添加 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
}
按钮仍然可用。
如何获得与仅测试白色 space 相同的响应?
想想你在这里做什么:
if textView.text!.trimmingCharacters(in: whitespace) == "" || textView.text! == "\n" {
把它分成几块:
// 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"
那么,如果 textView 包含 4 个空格和一个回车符会怎样 return?
第 1 部分不正确,因为删除空格后会留下“\n”
第 2 部分不正确,因为它是“(四个空格)\n”
这应该可以解释为什么您当前的代码没有达到您的预期。
但是,正如@rmaddy 所建议的那样,应该这样做:
func textViewDidChange(_ textView: UITextView) {
let str = textView.text.trimmingCharacters(in: .whitespacesAndNewlines)
if str == "" {
sendButton.isEnabled = false
} else {
sendButton.isEnabled = true
}
}
我有一个使用委托
测试白色 space 的 textViewfileprivate 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
}
}
如果用户输入全部 space,则 sendButton 永远不会启用。但是,如果用户输入 1 个或多个 return 个关键字符“\n”,它仍会被识别为一个字符,并且 sendButton 会启用。
在 textView 委托 shouldChangeTextInRange
、textViewDidChange
和 textViewDidEndEditing
中,我尝试添加 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
}
按钮仍然可用。
如何获得与仅测试白色 space 相同的响应?
想想你在这里做什么:
if textView.text!.trimmingCharacters(in: whitespace) == "" || textView.text! == "\n" {
把它分成几块:
// 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"
那么,如果 textView 包含 4 个空格和一个回车符会怎样 return?
第 1 部分不正确,因为删除空格后会留下“\n”
第 2 部分不正确,因为它是“(四个空格)\n”
这应该可以解释为什么您当前的代码没有达到您的预期。
但是,正如@rmaddy 所建议的那样,应该这样做:
func textViewDidChange(_ textView: UITextView) {
let str = textView.text.trimmingCharacters(in: .whitespacesAndNewlines)
if str == "" {
sendButton.isEnabled = false
} else {
sendButton.isEnabled = true
}
}