我有一个 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/