将光标移动到UITextField的开头。

8

有没有办法将光标置于UITextField的开头?

当我显示带有内容的控件时,光标会被放置在文本的末尾。我想把它移到开头。

3个回答

19

UITextField符合UITextInput协议,该协议提供了一些方法,让您可以控制所选范围。在我的测试中这个是有效的:

-(void)textFieldDidBeginEditing:(UITextField *)textField {
    textField.selectedTextRange = [textField
        textRangeFromPosition:textField.beginningOfDocument
        toPosition:textField.beginningOfDocument];
}

这个解决方案非常好!确保你遵循UITextField代理协议。 :) - Rizwan Ahmed

8
您正在处理这个问题。 UITextField 没有任何公共属性来设置光标位置(实际上对应于当前选定文本的开头)。如果您可以使用UITextView,则以下委托方法将强制将光标移到文本的开头。只需注意用户不会预期此行为,并且您应该仔细检查您想要执行此操作的动机。
- (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;
    }
}

其中shouldMoveCursor是您在控制器中维护的BOOL变量。


嘿,warrenm,谢谢伙计。这段代码真是太棒了。向你致敬。 - anshul

1
适用于我。
// 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];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接