【发布时间】:2011-05-09 23:29:09
【问题描述】:
有没有办法让光标位于UITextField 的开头?
当我显示带有内容的控件时,光标位于文本的末尾。我想把它移到开头。
【问题讨论】:
标签: ios iphone uitextfield
有没有办法让光标位于UITextField 的开头?
当我显示带有内容的控件时,光标位于文本的末尾。我想把它移到开头。
【问题讨论】:
标签: ios iphone uitextfield
UITextField 符合UITextInput 协议,该协议提供了让您控制所选范围的方法。这在我的测试中有效:
-(void)textFieldDidBeginEditing:(UITextField *)textField {
textField.selectedTextRange = [textField
textRangeFromPosition:textField.beginningOfDocument
toPosition:textField.beginningOfDocument];
}
【讨论】:
你正在与这个系统作斗争。 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 变量。
【讨论】:
为我工作
// 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];
【讨论】: