ios – 在设置其值后如何在UITextField中移动光标

任何人都可以帮助我:我需要实现UITextField输入号码。该数字应始终为十进制格式,其中4个位置12.3456或12.3400。
所以我创建了NSNumberFormatter,帮助我与小数位。

我正在设置UITextField值

– (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
 方法。
我处理输入,使用格式化程序,最后调用[textField setText:myFormattedValue];

这个工作正常,但这个调用也会将光标移动到我的字段的末尾。那是不需要的例如。我的字段中有12.3400,光标位于一开始,用户键入数字1.结果值为112.3400,但光标移动到最后。当用户期望(刚刚在最近添加的数字1之后)时,我想用光标结束。有一些关于在TextView中设置光标的主题,但这是UITextField。我也试图捕获该字段的selectedTextRange,它保存光标位置正确,但在setText方法调用后,这会自动更改,原始UITextRange丢失(更改为当前)。希望我的解释很清楚。

请帮我一下非常感谢你。

编辑:最后,我决定在整个编辑后将功能切换到更改格式,并且工作得很好。我已经通过添加一个选择器forControlEvents:UIControlEventEditingDidEnd。

在更改UITextField.text属性后,在设置text属性之后,与旧文本相关联的任何先前对UITextPosition或UITextRange对象的引用将被设置为nil。在设置文本属性之前,需要在操作后存储文本偏移量。

这对我有用(注意,如果您在下面的示例中从t中删除任何字符,则必须测试cursorOffset是否为< textField.text.length):

- (BOOL) textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange) range replacementString:(NSString *) string

{
    UITextPosition *beginning = textField.beginningOfDocument;
    UITextPosition *start = [textField positionFromPosition:beginning offset:range.location];
    UITextPosition *end = [textField positionFromPosition:start offset:range.length];
    UITextRange *textRange = [textField textRangeFromPosition:start toPosition:end];

    // this will be the new cursor location after insert/paste/typing
    NSInteger cursorOffset = [textField offsetFromPosition:beginning toPosition:start] + string.length; 

    // now apply the text changes that were typed or pasted in to the text field
    [textField replaceRange:textRange withText:string];

    // now go modify the text in interesting ways doing our post processing of what was typed...
    NSMutableString *t = [textField.text mutableCopy];
    t = [t upperCaseString];
    // ... etc

    // now update the text field and reposition the cursor afterwards
    textField.text = t;
    UITextPosition *newCursorPosition = [textField positionFromPosition:textField.beginningOfDocument offset:cursorOffset];
    UITextRange *newSelectedRange = [textField textRangeFromPosition:newCursorPosition toPosition:newCursorPosition];
    [textField setSelectedTextRange:newSelectedRange];

    return NO;
}
http://stackoverflow.com/questions/11157791/how-to-move-cursor-in-uitextfield-after-setting-its-value

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ios – 在设置其值后如何在UITextField中移动光标