gpt4 book ai didi

iphone - uitextfield 中的光标位置

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:31 26 4
gpt4 key购买 nike

我在我的 Controller 中使用自定义键盘。但是如何在 uitextfield 中获取光标位置。我的要求是在文本字段的所需位置输入一个字符。是否可以?

最佳答案

假设您的代码是在对象的方法中编写的,其中 self.textField 是相关的 UITextField。

你可以找到光标/选择的当前位置:

NSRange range = self.textField.selectedTextRange;

如果用户没有选择文本,range.length 将为 0,表明它只是一个光标。不幸的是,这个属性似乎不符合 KVO,所以当它发生变化时没有有效的方法来通知,但是这在你的情况下应该不是问题,因为你可能真的只在你响应用户交互时才关心它您的自定义键盘。

然后您可以使用(假设 newText 保存来自自定义键盘的输入)。

[self.textField replaceRange:range withText:newText];

如果您随后需要调整光标/选择,您可以使用:

self.textField.selectedTextRange = newRange;

例如,您可能希望将光标定位在您插入的文本之后。

更新:

在我最初的回答中,我没有注意到我正在利用我添加到 UITextView 的类别:

- (void)setSelectedRange:(NSRange)selectedRange
{
UITextPosition* from = [self positionFromPosition:self.beginningOfDocument offset:selectedRange.location];
UITextPosition* to = [self positionFromPosition:from offset:selectedRange.length];
self.selectedTextRange = [self textRangeFromPosition:from toPosition:to];
}

- (NSRange)selectedRange
{
UITextRange* range = self.selectedTextRange;
NSInteger location = [self offsetFromPosition:self.beginningOfDocument toPosition:range.start];
NSInteger length = [self offsetFromPosition:range.start toPosition:range.end];
NSAssert(location >= 0, @"Location is valid.");
NSAssert(length >= 0, @"Length is valid.");
return NSMakeRange(location, length);
}

然后使用 self.textField.selectedRange 代替 self.textField.selectedTextRange 并按照我的描述进行操作。

感谢 omz 指出我的错误。

当然,您可以直接使用 UITextRange,但至少在我的例子中,这被证明是相当笨拙的。

关于iphone - uitextfield 中的光标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2778703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com