swift - TextView 将前两个字符大写而不是一个
问题描述
因此,我在 UITextView 中添加了占位符功能,现在它将输入文本的前两个字符大写,而不是像预期的那样大写。
如果您能以任何方式提供帮助,我将不胜感激你们帮助解决这个问题。我一直在努力,但我似乎一无所获。
这是代码:
class ViewController: UIViewController {
@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
textView.delegate = self
textView.text = "Type something"
textView.textColor = UIColor.rgb(197, 197, 199)
}
}
extension ViewController: UITextViewDelegate {
// Put cursor at the beginning of TextView when editing begins
func textViewDidBeginEditing(_ textView: UITextView) {
textView.selectedTextRange = textView.textRange(from: textView.beginningOfDocument, to: textView.beginningOfDocument)
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
// Sets placeholder for UITextView
let updatedText = (textView.text as NSString).replacingCharacters(in: range, with: text)
if updatedText.isEmpty {
textView.text = "Type something"
textView.textColor = UIColor.rgb(197, 197, 199)
textView.selectedTextRange = textView.textRange(from: textView.beginningOfDocument, to: textView.beginningOfDocument)
} else if textView.textColor == UIColor.rgb(197, 197, 199) && !text.isEmpty {
textView.textColor = UIColor.black
textView.text = text
} else {
return true
}
return false
}
// Prevents selecting the placeholder
func textViewDidChangeSelection(_ textView: UITextView) {
if self.view.window != nil {
if textView.textColor == UIColor.rgb(197, 197, 199) {
textView.selectedTextRange = textView.textRange(from: textView.beginningOfDocument, to: textView.beginningOfDocument)
}
}
}
}
谢谢!
解决方案
下面的代码解决了文本视图中前 2 个字母的大写问题。
func textViewDidChange(_ textView: UITextView) {
if textView.text.isEmpty {
textView.text = "Type something"
textView.textColor = self.placeholderTextColor
} else {
textView.textColor = .black
}
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text.isEmpty {
let updatedText = (textView.text as NSString).replacingCharacters(in: range, with: text)
if updatedText.isEmpty {
textView.text = "Type something"
textView.textColor = self.placeholderTextColor
textView.selectedRange = NSRange(location: 0, length: 0)
}
} else {
if textView.text == "Type something" {
textView.text = ""
}
textView.textColor = .black
}
return true
}
文本视图在文本视图中将前 2 个字符大写的原因是您在下面的委托方法中返回了false
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool
推荐阅读
- mysql - 在 MySQL 数据库模式中仅显示已填充表的列表
- python - 交易API数据采集
- google-data-studio - getData 请求中缺少 dateRange
- excel - 如何将外部附件添加到通过 Excel VBA 发送的电子邮件?
- owl - 为什么同时声明两个属性限制涉及 rdfs:subClassof 有时只是一个逗号?
- jquery - 如何附加记录以从特定列开始?
- powercli - 如何使用 powercli 在全新的虚拟机上安装 vmware 工具?
- matlab - 定期保存完整的 Simulink SimState 或在仿真期间每次谓词为真时保存
- magento - 运行 Magento 2 命令时超出 Php 内存限制
- spring-data - Spring数据反应Cassandra没有在启动时创建键空间-InvalidQueryException:键空间'xxx'不存在