gpt4 book ai didi

ios - 使用 textViewDidChange 限制 UITextView 中的字符

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

我想将输入到 UITextView 中的内容限制为 double ,每个 double 由一个空格分隔。当然这意味着只允许一位小数点。

以下代码删除字母和符号,但不适用于小数。输入小数点后,输入的下一个字符将删除小数点。

我做错了什么???

import UIKit

class ViewController: UIViewController, UITextViewDelegate {

@IBOutlet weak var dataInputField: UITextView!

var currentEntryHasDecimalPoint:Bool = false
var validChars: Set<Character> = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", " "]


override func viewDidLoad() {
super.viewDidLoad()
dataInputField.delegate = self
}


func textViewDidChange(_ textView: UITextView ) {

if let str = dataInputField.text, !str.isEmpty {

let validChar:Bool = Set(str).isSubset(of: validChars)
if validChar {

let newChar = str.last!
switch newChar {
case ".":
currentEntryHasDecimalPoint = true
validChars.remove(".")
case " ":
currentEntryHasDecimalPoint = false
validChars.insert(".")

default:
print("default")
}
}

else {
dataInputField.deleteBackward()
}
}
}

}

最佳答案

由于 deleteBackward() 确实对 textView 进行了更改,因此它也会触发 textViewDidChange。当你输入 "." 后跟一个字母时,"." 已经从 validChars 中移除,该字母将被删除并触发 textViewDidChange,那么 "." 将被删除。您应该使用正则表达式 /^(?:[0-9]+(?:\.$|\.[0-9]+)?(?:\s+|\s*$ 验证文本))+$/ 而不是使用 Set 操作。

func textViewDidChange(_ textView: UITextView ) {

if let str = textView.text,
!str.isEmpty,
let regex = try? NSRegularExpression(pattern: "^(?:[0-9]+(?:\\.$|\\.[0-9]+)?(?:\\s+|\\s*$))+$", options: []),
regex.numberOfMatches(in: str, options: [], range: NSRange(location: 0, length: str.count)) == 0
{
textView.deleteBackward()
}
}

关于ios - 使用 textViewDidChange 限制 UITextView 中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54067904/

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