ios html显示光标位置,ios-控制UITextField中的光标位置

ios-控制UITextField中的光标位置

我有一个UITextField,通过修改更改通知处理程序中的文本来强制格式化。 这很好用(一旦我解决了重入问题),但又给我带来了另一个烦人的问题。如果用户将光标移动到字符串末尾以外的位置,则我的格式更改会将光标移动到字符串末尾。 这意味着用户一次不能在文本字段的中间插入多个字符。有没有办法记住然后重新设置UITextField中的光标位置?

7个解决方案

66 votes

控制UITextField中的光标位置很复杂,因为输入框和计算位置涉及很多抽象。 但是,这肯定是可能的。 您可以使用成员函数idx:

[input setSelectedTextRange:[input textRangeFromPosition:start toPosition:end]];

这是一个接受范围并选择该范围内文本的函数。 如果只想将光标放在某个索引处,则使用长度为0的范围:

+ (void)selectTextForInput:(UITextField *)input atRange:(NSRange)range {

UITextPosition *start = [input positionFromPosition:[input beginningOfDocument]

offset:range.location];

UITextPosition *end = [input positionFromPosition:start

offset:range.length];

[input setSelectedTextRange:[input textRangeFromPosition:start toPosition:end]];

}

例如,将光标放置在UITextField input中的idx上:

[Helpers selectTextForInput:input

atRange:NSMakeRange(idx, 0)];

Chris R answered 2020-06-22T04:19:33Z

4 votes

有助于定位在索引处(Swift 3)

private func setCursorPosition(input: UITextField, position: Int) {

let position = input.position(from: input.beginningOfDocument, offset: position)!

input.selectedTextRange = input.textRange(from: position, to: position)

}

George Muntean answered 2020-06-22T04:19:54Z

3 votes

我终于找到了解决这个问题的方法! 您可以将需要插入的文本放入系统粘贴板,然后将其粘贴到当前光标位置:

[myTextField paste:self]

我在此人的博客上找到了解决方案:

[HTTP://Dev.若AG field.com/2009/09/insert-text-at-current-cursor-location.HTML]

粘贴功能是特定于OS V3.0的,但是我已经对其进行了测试,并且可以使用自定义键盘正常工作。

如果您使用此解决方案,则可能应该保存用户现有的剪贴板内容,然后立即将其还原。

Dan J answered 2020-06-22T04:20:32Z

2 votes

这是@Chris R.的Swift版本-为Swift3更新

private func selectTextForInput(input: UITextField, range: NSRange) {

let start: UITextPosition = input.position(from: input.beginningOfDocument, offset: range.location)!

let end: UITextPosition = input.position(from: start, offset: range.length)!

input.selectedTextRange = input.textRange(from: start, to: end)

}

gabuchan answered 2020-06-22T04:20:52Z

1 votes

可以随意使用此UITextField类别来获取和设置光标位置:

@interface UITextField (CursorPosition)

@property (nonatomic) NSInteger cursorPosition;

@end

@implementation UITextField (CursorPosition)

- (NSInteger)cursorPosition

{

UITextRange *selectedRange = self.selectedTextRange;

UITextPosition *textPosition = selectedRange.start;

return [self offsetFromPosition:self.beginningOfDocument toPosition:textPosition];

}

- (void)setCursorPosition:(NSInteger)position

{

UITextPosition *textPosition = [self positionFromPosition:self.beginningOfDocument offset:position];

[self setSelectedTextRange:[self textRangeFromPosition:textPosition toPosition:textPosition]];

}

@end

Pavel Alexeev answered 2020-06-22T04:21:17Z

0 votes

我认为没有办法将光标放置在UITextField中的特定位置(除非您非常棘手并模拟了触摸事件)。 相反,当用户完成编辑其文本时(在textFieldShouldEndEditing:中),如果他们的输入不正确,我将处理格式设置,不允许文本字段完成编辑。

pix0r answered 2020-06-22T04:21:37Z

-2 votes

这是一个片段,可以很好地解决此问题:

- (void)textFieldDidBeginEditing:(UITextField *)textField{

UITextPosition *positionBeginning = [textField beginningOfDocument];

UITextRange *textRange =[textField textRangeFromPosition:positionBeginning

toPosition:positionBeginning];

[textField setSelectedTextRange:textRange];

}

来源@omz

Alex Cio answered 2020-06-22T04:22:01Z

你可能感兴趣的:(ios,html显示光标位置)