Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 限制字符复制限制(&A);是否在swift中粘贴UITextView?_Ios_Swift_Uitextview - Fatal编程技术网

Ios 限制字符复制限制(&A);是否在swift中粘贴UITextView?

Ios 限制字符复制限制(&A);是否在swift中粘贴UITextView?,ios,swift,uitextview,Ios,Swift,Uitextview,我限制用户在键入或复制粘贴文本时不超过200个字符的限制。假设我的文本字符数为190。现在我只能再输入10个字符了。即使我粘贴200个字符,它也只会粘贴复制文本的最初10个字符 现在的问题是当用户从UITextView中选择一些单词时。在这里,单词仍然被选择为高亮显示。现在,当我将复制的单词粘贴到选定的单词上时,它允许粘贴更多字符,即使限制为200 代码: func textView(_ textView: UITextView, shouldChangeTextIn range: NSRang

我限制用户在键入或复制粘贴文本时不超过200个字符的限制。假设我的文本字符数为190。现在我只能再输入10个字符了。即使我粘贴200个字符,它也只会粘贴复制文本的最初10个字符

现在的问题是当用户从UITextView中选择一些单词时。在这里,单词仍然被选择为高亮显示。现在,当我将复制的单词粘贴到选定的单词上时,它允许粘贴更多字符,即使限制为200

代码:

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) {
    let str = (textView.text! as NSString).replacingCharacters(in: range, with: text)

    if str.length >= 200 {
        let index = str.index(str.startIndex, offsetBy: 200)
        textView.text = str.substring(to: index).trim
    }


    let remainChars = 200 - textView.text!.length
    self.descriptionCountLabel.text? = String(remainChars)
}

您可以尝试此操作,尽管它会因“撤消”而崩溃:

这可以防止错误,但并不理想,因为如果超过限制,用户将失去撤消的能力:

func textViewDidChange(_ textView: UITextView) {
    if textView.text.count > 200 { textView.undoManager?.removeAllActions() }
    textView.text = String(textView.text.prefix(200))
}

您是否询问如何确保如果文本视图有190个字符,并且用户选择了20个字符,然后尝试粘贴100个字符,选择的20个字符只会替换为前30个粘贴的字符,而文本视图中只有200个字符?如果用户键入了190个字符,则最大限制为200个。现在,用户只能再输入10个字符。如果用户复制了100个字符并粘贴,则只会粘贴前10个字符。我已处理此场景。如果用户选择了几个单词并粘贴这些字符,则最大限制为200个单词高亮显示&用户在选择(高亮显示)这些选定单词时粘贴这些复制的单词,然后它允许粘贴200多个单词如果您在
shouldChangeTextIn
中显式设置文本视图的
text
属性,则此时必须返回
false
。如果更改按原样进行,则仅返回
true
。设置
textView.text
后,在
if
块末尾的my code中返回false的位置。
func textViewDidChange(_ textView: UITextView) {
    if textView.text.count > 200 { textView.undoManager?.removeAllActions() }
    textView.text = String(textView.text.prefix(200))
}