Moving the cursor to the beginning of UITextField

前端 未结 3 1715
深忆病人
深忆病人 2020-11-29 13:17

Is there a way to make the cursor be at the start of a UITextField?

When I display the control with content, the cursor is placed at the end of the string. I\'d lik

相关标签:
3条回答
  • 2020-11-29 13:54

    UITextField conforms to the UITextInput protocol, which provides methods that let you control the selected range. This works in my testing:

    -(void)textFieldDidBeginEditing:(UITextField *)textField {
        textField.selectedTextRange = [textField
            textRangeFromPosition:textField.beginningOfDocument
            toPosition:textField.beginningOfDocument];
    }
    
    0 讨论(0)
  • 2020-11-29 13:56

    You're fighting the system on this one. UITextField does not have any public properties to set the cursor position (which actually correlates to the beginning of the current selection). If you can use a UITextView instead, the following delegate methods will force the cursor to the beginning of the text. Just be aware that users won't expect this behavior and you should double-check your motives for wanting to do it.

    - (void)textViewDidBeginEditing:(UITextView *)textView {
        shouldMoveCursor = YES;
    }
    
    - (void)textViewDidChangeSelection:(UITextView *)textView {
        if(shouldMoveCursor)
        {
            NSRange beginningRange = NSMakeRange(0, 0);
            NSRange currentRange = [textView selectedRange];
            if(!NSEqualRanges(beginningRange, currentRange))
                [textView setSelectedRange:beginningRange];
            shouldMoveCursor = NO;
        }
    }
    

    Where shouldMoveCursor is a BOOL variable you maintain in your controller.

    0 讨论(0)
  • 2020-11-29 14:06

    works for me

    // Get current selected range , this example assumes is an insertion point or empty selection
    UITextRange *selectedRange = [textField selectedTextRange];
    // Calculate the new position, - for left and + for right
    UITextPosition *newPosition = [textField positionFromPosition:selectedRange.start offset:3];
    // Construct a new range using the object that adopts the UITextInput, our textfield
    UITextRange *newRange = [textField textRangeFromPosition:newPosition toPosition:newPosition];
    // Set new range
    [textField setSelectedTextRange:newRange];
    
    0 讨论(0)
提交回复
热议问题