如何将文本“插入”到UITextField中?

3
我正在尝试将文本插入到UITextField中。但是,通过插入,我的意思是用新字符替换光标位置的字符(Windows上的插入按钮的功能)。
如果我手动替换传入的字符串并使用setText(将shouldChangeCharactersInRange方法返回的NO),则光标会移动到textField的末尾。
2个回答

3

对于 UITextField(iOS 3.2+),可以尝试以下方法:

[textField replaceRange:[textField selectedTextRange] withText:toInsert];

1

您可以像以前一样替换文本并恢复插入符号的位置。请注意,这只能使用UITextView而不是UITextField来完成(除非您绝对必须使用UITextField,否则需要更多不必要的工作):

NSRange selectionRange = myTextView.selectedRange;
myTextView.text = myNewText;
myTextView.selectedRange = selectionRange;

你必须注意,检查selectionRange变量的有效性对于新文本是一个好主意 - 确保光标位置不大于新文本长度。


дҪҶжҳҜ UITextField жІЎжңү selectedTextRange еұһжҖ§гҖӮеҸӘжңү UITextView жңү selectedRangeгҖӮ - ugur
UITextInput 协议将此属性定义为必需,并且 UITextField 符合 UITextInput 协议,这使它支持 selectedTextRange - Nick
抱歉,但如果你在 XCode 中写了那三行代码,你应该已经发现它并不能正常运行。 - ugur
你是对的,ugur,解决方案并不像看起来那么简单。经过进一步调查,似乎UITextRange是一种“抽象”类别,UITextInput委托必须实现它。这意味着UITextField有自己的实现。你可以从技术上对UITextField进行子类化,然后手动处理选择,但这需要大量的工作来实现。相反,我会使用UITextView,它允许使用原始的NSRange设置选择范围 - 在这种情况下,我的示例将起作用。如果这个答案没有完全回答你的问题,请见谅。 - Nick
谢谢你的帮助。我想我应该使用UITextView。我本来想用UITextField,但似乎没有必要这样做。 - ugur

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