ios - UITextField - 开头和结尾的不可编辑前缀字符

标签 ios swift uiviewcontroller uitextfield prefix

我有一个 UITextField,我想给它不可编辑的字符。例如,我有 "Hello...",我希望用户在 o. 之间写入,例如 "你好,userTypedStuff...”

我使用了这种方法,但是通过这种方法,用户可以长按开头,例如转到 Hello 中的位置。因此,用户可能会弄​​乱前缀字符。

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    let protectedRange = NSMakeRange(0, 5)
    let intersection = NSIntersectionRange(protectedRange, range)
    if intersection.length > 0 {

        return false
    }
    if range.location == 12 {
        return true
    }
    if range.location + range.length > 12 {
        return false
    }
    return true
}

如何设置“不可编辑的前 5 个字符和最后 3 个字符”之类的内容?

<小时/>

编辑:UITextField 的文本居中对齐,并形成在 UILabel 上方。但是,如果我给 textField 标签的宽度,textField 的宽度不会变大。因此,我给出了它的宽度 View 的宽度。有没有一种方法可以在两端分别创建 Hello... 的 UILabel,并在中间有 textField (文本对齐中心),自动拉伸(stretch)宽度?

<小时/>

编辑2:

如果我的 TextView 两侧都有两个静态 UILabels,这可能是一个解决方法。但是,这次当用户开始输入时,UITextField 不会将 UILabels 推到两侧。TextField 居中文本对齐。如果我在创建它时给它一个恒定的宽度(使用CGRectMake以编程方式),它不会在用户输入时拉伸(stretch)它的宽度。因此,我给了它 View 的宽度。有没有一种方法可以在用户输入时自动拉伸(stretch) TextField 的宽度,从而将 UILabels 推到两侧?

 "Hello" [textfield] "..."
 uilabel             uilabel

最佳答案

class SpecialTextField: UITextField {

// MARK: - UITextField Observing
override internal func willMoveToSuperview(newSuperview: UIView!) {
    if newSuperview != nil {
        text = "Hello..."
        addTarget(self, action: #selector(SpecialTextField.didChangeText), forControlEvents: .EditingChanged)
    }
}

override internal func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
    return false
}


private var newVal: String = "Hello..."

func didChangeText() {
    var userDidEditDefaultValue = true
    if (text?.characters.count > 7) { // Count of "Hello..."
        if text?.rangeOfString("Hello") != nil {
            if text?.rangeOfString("...") != nil {
                userDidEditDefaultValue = false
            }
        }
    }
    if userDidEditDefaultValue {
        text = newVal
    }
    newVal = text ?? "Hello..."
}
}

这将不允许用户更改“Hello...”或“Hello userEntry...”的默认值

您可以使用委托(delegate)方法在中间插入文本。

希望有帮助。

关于ios - UITextField - 开头和结尾的不可编辑前缀字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37104856/

相关文章:

ios - 如何使表格 View 水平全宽

iphone - 如何切换 ViewController 而不是添加到堆栈?

iphone - 清除 subview 时 View 困惑

ios - 在 UIView 中放置 UITableView 时,永远不会命中 cellForRowAtIndexPath

ios - 从我的应用程序链接到照片应用程序/相机胶卷

ios - 游戏背景 - PNG 文件的正确分辨率?

ios - 仅比较 Date 对象中的时差

ios - 无法访问属性的值

swift - SwiftUI `@State` 关键字有什么作用?

ios - 释放与导航 Controller 关联的 View Controller