ios - Swift - 无法在 UITextField 中从用户自定义光标位置

标签 ios swift cursor uitextfield

我有一个文本字段,但我不希望用户能够通过触摸并按住文本字段来设置光标位置。有没有办法让光标始终位于文本字段的最后?

最佳答案

首先,改变textField的这种默认行为是不好的。

根据您的评论,如果您想添加信用卡并且面临一些输入复杂性,那么我从我的旧项目中找到了代码,可能它会为您工作。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

            let replacementStringIsLegal = string.rangeOfCharacter(from: NSCharacterSet(charactersIn: "0123456789").inverted) == nil

            if !replacementStringIsLegal {
                return false
            }

            let newString = (textField.text! as NSString).replacingCharacters(in: range, with: string)
            let components = newString.components(separatedBy: NSCharacterSet(charactersIn: "0123456789").inverted)

            let decimalString = components.joined(separator: "") as NSString
            let length = decimalString.length
            let hasLeadingOne = length > 0 && decimalString.character(at: 0) == (1 as unichar)

            if length == 0 || (length > 16 && !hasLeadingOne) || length > 19
            {
                let newLength = (textField.text! as NSString).length + (string as NSString).length - range.length as Int

                return (newLength > 16) ? false : true
            }
            var index = 0 as Int
            let formattedString = NSMutableString()

            if hasLeadingOne
            {
                formattedString.append("1 ")
                index += 1
            }
            if length - index > 4
            {
                let prefix = decimalString.substring(with: NSMakeRange(index, 4))
                formattedString.appendFormat("%@ ", prefix)
                index += 4
            }

            if length - index > 4
            {
                let prefix = decimalString.substring(with: NSMakeRange(index, 4))
                formattedString.appendFormat("%@ ", prefix)
                index += 4
            }
            if length - index > 4
            {
                let prefix = decimalString.substring(with: NSMakeRange(index, 4))
                formattedString.appendFormat("%@ ", prefix)
                index += 4
            }


            let remainder = decimalString.substring(from: index)
            formattedString.append(remainder)
            textField.text = formattedString as String
            return false     
    }

关于ios - Swift - 无法在 UITextField 中从用户自定义光标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47504618/

相关文章:

使用核心文本框架的 PDF 生成中的 IOS 文本颜色不起作用

ios - 我如何构建独立的应用程序,用户可以在没有 Expo 客户端的情况下打开它

string - 从 CLPlacemark 创建地址字符串

ios - SwiftUI View 不更新

MYSQL 存储过程问题

android - 将 Android Cursor 转换为数组的 ArrayList

javascript - Titanium mobileweb 字体无法正常工作

ios - 是否可以更改 UITableView 中的字体类型和大小?

objective-c - Swift 类使用 Objective-C 类使用 Swift 类

windows - 触摸屏隐藏光标