在ios中获取UITextField的光标位置

lak*_*esh 15 uitextfield ios

我试图控制UITextField中的光标位置.用户不能一次插入多个字符到文本字段的中间.它将它移动到文本字段的末尾.所以SO中的帖子:在UITextField中控制光标位置它解决了我的问题.但我需要知道当前光标位置.

我的代码看起来像这样:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
   if (textField.tag == 201) 
   {
     [myclass selectTextForInput:textField atRange:NSMakeRange(idx, 0)];
   }
}
Run Code Online (Sandbox Code Playgroud)

它在idx给我一个错误.我怎么找到的?

rma*_*ddy 27

UITextField符合UITextInput具有获取当前选择的方法的协议.但这些方法很复杂.你需要这样的东西:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if (textField.tag == 201) {
        UITextRange *selRange = textField.selectedTextRange;
        UITextPosition *selStartPos = selRange.start;
        NSInteger idx = [textField offsetFromPosition:textField.beginningOfDocument toPosition:selStartPos];

        [myclass selectTextForInput:textField atRange:NSMakeRange(idx, 0)];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 那么在删除uitextfield中的字符后如何确保光标保持在同一位置? (3认同)

Sur*_*gch 5

Swift版本

if let selectedRange = textField.selectedTextRange {

    let cursorPosition = textField.offsetFromPosition(textField.beginningOfDocument, toPosition: selectedRange.start)
    print("\(cursorPosition)")
}
Run Code Online (Sandbox Code Playgroud)

关于获取和设置光标位置的完整答案就在这里.