首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Swift 4中更改文本字段中的文本时在每2个字符后添加分隔符

如何在Swift 4中更改文本字段中的文本时在每2个字符后添加分隔符
EN

Stack Overflow用户
提问于 2018-09-24 20:07:28
回答 4查看 2.4K关注 0票数 2

在我的项目中,我需要在文本字段中添加文本时放入设备MAC地址验证。我的设备mac地址格式是“AB:5E:CF:45:S5:6D”。因此,当我要添加任何字符时,它应该改为在文本字段中的2个字符后添加冒号。

示例:“45DF5R6”=“45:DF:5r:6”“SD45ER65DF6G”=“SD:45:ER:65:DF:6g”

感谢你的帮助。

提前谢谢。

EN

回答 4

Stack Overflow用户

发布于 2018-09-24 21:54:53

尝尝这个

代码语言:javascript
运行
复制
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let text = (textField.text! as NSString).replacingCharacters(in: range, with: string)
    let count = text.count
    if string != "" {
    if count > 17
    {
        return false
    }
    if count % 3 == 0{
        txtField.text?.insert(":", at: String.Index.init(encodedOffset: count - 1))
    }
    return true
  }
  return true
}
票数 2
EN

Stack Overflow用户

发布于 2018-09-25 02:05:11

您应该子类UITextField并添加一个用于编辑更改的控件事件的目标,然后您只需要删除无效的十六进制字符,并使用我在此answer中发布的每两个字符在字符串中插入一个字符的方法再次格式化清理后的字符串

代码语言:javascript
运行
复制
class MacAddressField: UITextField {
    override func didMoveToSuperview() {
        keyboardType = .default
        textAlignment = .left
        autocorrectionType = .no
        autocapitalizationType = .none
        addTarget(self, action: #selector(editingChanged), for: .editingChanged)
    }
    @objc func editingChanged(_ textField: UITextField) {
        text = text!
            .filter(\.isHexDigit)
            .prefix(12)
            .pairs
            .joined(separator: ":")
            .lowercased()
    }
}

代码语言:javascript
运行
复制
extension Collection {
    func subSequences(limitedTo maxLength: Int) -> [SubSequence] {
        precondition(maxLength > 0, "groups must be greater than zero")
        return .init(sequence(state: startIndex) { start in
            guard start < self.endIndex else { return nil }
            let end = self.index(start, offsetBy: maxLength, limitedBy: self.endIndex) ?? self.endIndex
            defer { start = end }
            return self[start..<end]
        })
    }
    var pairs: [SubSequence] { subSequences(limitedTo: 2) }
}
票数 2
EN

Stack Overflow用户

发布于 2018-09-24 20:14:46

您正在寻找UITextField的委托函数:

代码语言:javascript
运行
复制
func textField(_ textField: UITextField,  
               shouldChangeCharactersIn range: NSRange,
               replacementString string: String) -> Bool  

您可以在该函数中编写输入特定逻辑。它通常用于屏蔽电话号码,或者限制添加到文本字段中的字符数。你的格式化问题也很适合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52479082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档