gpt4 book ai didi

swift - 如何防止用户在 Swift 5 的 UITextView 中添加太多换行符?

转载 作者:行者123 更新时间:2023-11-28 13:32:43 35 4
gpt4 key购买 nike

我有一个 UITextView 让用户可以为他们刚刚录制的一些音频文件输入评论。
我想将他们可以使用的“\n”(换行符)的数量限制为 5 个(即,注释最多应有 5 行)。如果他们尝试转到第六行,我想显示一 strip 有合理消息的警报,并且在按下相关操作中的 OK 按钮后,我想让用户能够编辑他们的文本。

委派已经建立,optional func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool 的实现是我现在正在做的。
我放入的逻辑正确显示了警报,但随后,在单击“确定”并尝试删除一些字符后,该方法再次被调用,我得到了警报。
我知道这是因为计数器仍然停留在 5 但将其重置为 0 允许 9 行或更多,所以这不是解决方案。

这是我试过但没有按预期工作的代码:

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text == characterToCheck /* \n, declared globally */ {
characterCounter += 1 // this was also declared as a global property
}

if characterCounter > 4 {
let newlineAC = UIAlertController(title: "Too many linebreaks", message: "Please go back and make your comment fit into a maximum of 5 lines", preferredStyle: .alert)
newlineAC.addAction(UIAlertAction(title: "OK", style: .default) { [weak self] (_) in
let currentText = textView.text ?? ""
guard let currentTextRange = Range(range, in: currentText) else { return }

self?.comments.text = currentText.replacingOccurrences(of: "\n", with: "@ ", range: currentTextRange)
})
present(newlineAC, animated: true)

return false
} else {
return true
}
}

没有抛出错误消息,因为代码完全按照我的要求执行,但我显然是以错误的方式提出要求的。我能做什么?

最佳答案

这是我的解决方案:

根据 Matt Bart 反馈更新

 func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text == String(characterToCheck) /* \n, declared globally */ {
characterCounter += 1 // this was also declared as a global property
}

if text == "" {
let characters = Array(textView.text)
if characters.count >= range.location {
let deletedCharacter = characters[range.location]
if deletedCharacter == characterToCheck {
characterCounter -= 1
}
}
}

if characterCounter > 4 {
let newlineAC = UIAlertController(title: "Too many linebreaks", message: "Please go back and make your comment fit into a maximum of 5 lines", preferredStyle: .alert)
newlineAC.addAction(UIAlertAction(title: "OK", style: .default) { [weak self] (_) in
let currentText = textView.text ?? ""
guard let currentTextRange = Range(range, in: currentText) else { return }

self?.comments.text = currentText.replacingOccurrences(of: "\n", with: "@ ", range: currentTextRange)
})
present(newlineAC, animated: true, completion: { [weak self] in
self?.characterCounter -= 1
})

return false
} else {
return true
}
}

此外,将 characterToCheck 声明为 Character 而不是 String

characterCounter 必须从 0

开始

关于swift - 如何防止用户在 Swift 5 的 UITextView 中添加太多换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57116506/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com