Ios Swift-强制UITextview仅小写

Ios Swift-强制UITextview仅小写,ios,swift,uitextview,Ios,Swift,Uitextview,要强制UITextfield仅用于小写,请执行以下操作: lazy var myTextField: UITextField = { let textField = UITextField() textField.addTarget(self, action: #selector(forceLettersLowercased(_ :)), for: .editingChanged) return textField }() @objc func forceLetters

要强制UITextfield仅用于小写,请执行以下操作:

lazy var myTextField: UITextField = {
    let textField = UITextField()
    textField.addTarget(self, action: #selector(forceLettersLowercased(_ :)), for: .editingChanged)
    return textField
}()

@objc func forceLettersLowercased(_ sender: UITextField) {
    sender.text = sender.text?.lowercased()
}
如何使用UITextView实现相同的功能

lazy var myTextView: UITextView = {
    let textView = UITextView()
    return textView
}()

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
      
    let textLowerCased = text.lowercased()

    textView.text = (textView.text as NSString).replacingCharacters(in: range, with: textLowerCased)

    let numberOfChars = textView.text.count
    
    return numberOfChars <= 200
}
lazy var myTextView:UITextView={
让textView=UITextView()
返回文本视图
}()
func textView(textView:UITextView,shouldChangeTextIn范围:NSRange,replacementText:String)->Bool{
让textLowerCased=text.lowercased()
textView.text=(textView.text作为NSString)。替换字符(在:范围内,使用:textLowerCased)
让numberOfChars=textView.text.count

返回numberOfChars而不是
shouldChangeTextIn
,使用
textViewDidChange

extension ViewController: UITextViewDelegate {
    func textViewDidChange(_ textView: UITextView) {
        textView.text = textView.text.lowercased()
    }
}
结果:


您覆盖了错误的委托方法。
shouldChangeTextIn
顾名思义,是一种委托方法,它询问您是否应该更改给定范围内的文本。您应该使用此方法来防止用户输入某些字符

每当文本视图的文本发生更改时,都会调用它,但这并不意味着您应该使用它来检测文本视图中正在更改的文本,因为该方法将在文本更改之前被调用,这很有意义:它会在实际更改文本之前询问您是否应该更改文本。这就是为什么有两种方法第一个小写字母w来自您设置文本视图的文本,第二个大写字母w来自用户实际键入的文本

您应该实现的委托方法是:

func textViewDidChange(_ textView: UITextView)
这个函数实际上在文本更改后被调用。在这里,您可以执行与
UITextField
相同的操作:

textView.text = textView.text?.lowercased()

您似乎还将文本视图的最大长度限制为200个字符。该功能应保留在
shouldChangeTextIn
中。如果您不确定,请参阅如何执行此操作。

好的,谢谢,我会在5分钟内尝试,并让您知道。谢谢您的建议。我选择@aheze,因为他首先发布了答案,所以这是正确的。我投了赞成票你的回答很好。是的,这是一个非常好的解释。投票。奇怪的是,我试图找出为什么索引超出范围,但我实际上无法复制错误…我不知道。我正在处理另一个错误。完成后,我会回到这个问题,再次复制它,然后向你解释我到底采取了哪些步骤。