我有一个UITextField
,我强制格式化通过修改更改通知处理程序中的文本。这工作很好(一旦我解决了重入问题),但留给我更多的唠叨问题。 如果用户将光标移动到字符串末尾以外的某个位置,则我的格式更改将其移动到字符串的末尾。这意味着用户不能一次插入多个字符到文本字段的中间。 有没有办法记住然后重置UITextField
中的光标位置?控制在UITextField中的光标位置
回答
我不认为有一种方法可以将光标放置在您的UITextField
的特定位置(除非您非常棘手并且模拟了触摸事件)。相反,我会处理格式,当用户有完成编辑他们的文本(在textFieldShouldEndEditing:
),如果他们的条目不正确,不要让文本字段完成编辑。
我认为,但我正在实现类似于你在ATM输入数字的方式。十进制是永远存在的,当你键入数字,他们移动到左侧,以便在第一0.01进入1-0-5-0的结果,那么0.10,1.05,10.50。 要做到这一点,在年底将允许1050在现场,然后将其更改为10.50这是相当混乱给用户。 – Jeremy 2009-09-30 23:15:22
我终于找到了解决这个问题的办法!你可以把你需要插入到系统粘贴板的文本,然后将其粘贴在当前光标所在位置:
[myTextField paste:self]
我发现这个人的博客解决方案:
http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.html
的粘贴功能是特定于OS V3.0,但是我已经测试过它,它对我来说用自定义键盘工作正常。
如果您采用这种解决方案,那么您应该保存用户现有的剪贴板内容并在之后立即恢复。
控制UITextField中的光标位置很复杂,因为输入框和计算位置涉及到很多抽象。但是,这当然是可能的。您可以使用成员函数setSelectedTextRange
:
[input setSelectedTextRange:[input textRangeFromPosition:start toPosition:end]];
这里是一个函数,它接受一个范围,在这个范围内选择的文本。在的UITextField input
+ (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]];
}
例如,将光标置于idx
:如果你只是想将光标放在某个索引,只需使用范围长度为0
[Helpers selectTextForInput:input
atRange:NSMakeRange(idx, 0)];
干得好。这对我很有用,而且很灵活。 – LostInTheTrees 2014-03-26 01:20:17
总的想法是好的,但是这个代码要驻留在上的NSTextField类别,喜欢这里:https://github.com/MaxZeng/UITextField-SelectedRange/blob/master/UITextFieldSelectedRange/UITextField%2BSelection.m – osxdirk 2015-03-13 08:19:15
抱歉,它不起作用,光标停留在最后... iOS 8.0在这里。 – 2015-03-28 17:19:38
这里是对这个问题的正常工作的一个片段:
- (void)textFieldDidBeginEditing:(UITextField *)textField{
UITextPosition *positionBeginning = [textField beginningOfDocument];
UITextRange *textRange =[textField textRangeFromPosition:positionBeginning
toPosition:positionBeginning];
[textField setSelectedTextRange:textRange];
}
这是@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)
}
随意使用这个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
有用的索引位置(斯威夫特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)
}
- 1. uitextfield中的光标位置
- 2. 在UITextField中设置光标位置(Monotouch)
- 3. 如何确定UITextField的光标位置?
- 4. 在Swift中获取和设置UITextField和UITextView的光标位置
- 5. 在光标位置
- 6. 鼠标光标在Javascript中的位置?
- 7. UITextField将光标设置为开始文本位置
- 8. 光标位置
- 9. EditText中的光标位置
- 10. 在NumericUpDown控件中设置光标位置
- 11. Flex:在RichEditableText控件中设置插入光标位置
- 12. UITextField禁用光标
- 13. UITextfield光标移动
- 14. 在Mac OS中设置光标位置
- 15. 尝试更正“播放器”跟随控制(光标)的位置
- 16. Swift UITextField图标位置
- 17. 光标在UITextView中的像素位置
- 18. 如何控制光标在Emacs中的缩位展开?
- 19. 如何在编辑控件中偏移光标的位置?
- 20. EditText光标位置
- 21. 光标位置,jquery
- 22. 设置光标位置
- 23. 设置光标位置
- 24. 集光标位置的JavaScript
- 25. EditText的光标位置
- 26. 在c中移动光标位置#
- 27. 在visual basic中更改光标位置
- 28. 在c中计算光标位置#
- 29. 在mailItem中获取光标位置htmlbody
- 30. 更改UITextField中光标的颜色
有关获取和设置光标位置,插入文本斯威夫特答案。 http://stackoverflow.com/a/34922332/3681880 – Suragch 2016-01-21 11:37:40