【发布时间】:2014-12-04 17:29:50
【问题描述】:
在处理一个新的文本条目后,我正在尝试将 NSAttributedString 样式应用到 UITextField,逐个击键。问题是每当我替换文本时,光标都会在每次更改时跳到最后。这是我目前的方法……
立即接收并显示文本更改(当我返回 false 并手动进行文本替换时,同样的问题也适用)
func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
let range:NSRange = NSRange(location: range.location, length: range.length)
let newString = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string);
return true
}
我订阅了 UITextFieldTextDidChangeNotification 通知。这会触发样式。当文本更改时,我使用一些 format() 函数将它 (NSString) 替换为格式化版本 (NSAttributedString)。
func textFieldTextDidChangeNotification(userInfo:NSDictionary) {
var attributedString:NSMutableAttributedString = NSMutableAttributedString(string: fullString)
attributedString = format(textField.text) as NSMutableAttributedString
textField.attributedText = attributedString
}
这样的造型效果很好。但是,在每次替换文本后,光标都会跳到字符串的末尾。如何关闭此行为或手动将光标移回开始编辑的位置? ... 或者有更好的解决方案在编辑时设置文本样式?
【问题讨论】:
标签: ios swift uitextfield uitextfielddelegate