在输入文本字段时在文本字段字符之间添加空格

在输入文本字段时在文本字段字符之间添加空格,第1张

在输入文本字段时在文本字段字符之间添加空格

我们可以从实现oisdk:s SwiftSequence

chunk(n:)
方法的(版本号)的Swift
3版本开始:
Collection

extension Collection {    public func chunk(n: IndexDistance) -> [SubSequence] {        var res: [SubSequence] = []        var i = startIndex        var j: Index        while i != endIndex { j = index(i, offsetBy: n, limitedBy: endIndex) ?? endIndex res.append(self[i..<j]) i = j        }        return res    }}

在这种情况下,实现自定义格式是创建4个字符的块并将其通过“-”连接的简单情况:

func customStringFormatting(of str: String) -> String {    return str.characters.chunk(n: 4)        .map{ String(
print(customStringFormatting(of: "5022222222222222")) // 5022-2222-2222-2222print(customStringFormatting(of: "50222222222222"))   // 5022-2222-2222-22print(customStringFormatting(of: "5022222"))          // 5022-222
) }.joined(separator: "-")}

用法示例:

textField(_:shouldChangeCharactersIn:replacementString:)

如果适用于的

UITextFieldDelegate
方法
customStringFormatting(of:)
,我们可能希望过滤掉
String
方法中的现有分隔符,并将其实现为
extension String {    func chunkFormatted(withChunkSize chunkSize: Int = 4,         withSeparator separator: Character = "-") -> String {        return characters.filter { 
let maxNumberOfCharacters = 16func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {    // only allow numerical characters    guard string.characters.flatMap({ Int(String(
// current 1234-1234-123// user paste:777777777  // will result in1234-1234-1237-7777
)) }).count == string.characters.count else { return false } let text = textField.text ?? "" if string.characters.count == 0 { textField.text = String(text.characters.dropLast()).chunkFormatted() } else { let newText = String((text + string).characters .filter({ != "-" }).prefix(maxNumberOfCharacters)) textField.text = newText.chunkFormatted() } return false}
!= separator }.chunk(n: chunkSize) .map{ String() }.joined(separator: String(separator)) }}
扩展:

并实现文本字段的受控更新,例如,如下所示:

上面的最后一部分将截断用户可能粘贴的字符串(假定它们都是数字的),例如



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5087460.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-16
下一篇2022-11-16

发表评论

登录后才能评论

评论列表(0条)

    保存