如何从 iphone 中的 uitextfield 获取选定的文本?
我正在 iPhone 中开发文本到语音应用程序,
其中有一个接受输入的文本字段,我希望用户从文本字段中选择文本的某些部分,我的应用程序会将所选文本转换为语音。
我的问题是如何获取用户从文本字段中选择的文本?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
-[UITextField selectedText]
虽然
UITextField
没有selectedText
方法,它符合UITextInput
协议。因此,您可以使用所需的属性 &UITextInput
协议的方法,用于确定UITextField *textField
的selectedText
(或任何符合UITextInput
的对象) > 协议,例如UITextView
< /a>)。另外,您还可以使用所需的属性和属性。
UITextInput
的方法来计算UITextField *textField
的selectedRange
。-[UITextFieldDelegate textFieldDidChangeSelection:]
虽然
UITextFieldDelegate
没有声明textFieldDidChangeSelection:
委托方法,如-[UITextViewDelegate textViewDidChangeSelection:]
,当UITextField
的选择发生更改时,您仍然可以挂钩。为此,请子类化UITextField
并使用方法调配将您自己的代码添加到textField.inputDelegate
的-[UITextInputDelegate SelectionDidChange:]
。-[UITextField selectedText]
Although
UITextField
doesn't have aselectedText
method, it conforms to theUITextInput
protocol. So, you can use the required properties & methods of theUITextInput
protocol to determine theselectedText
of aUITextField *textField
(or any object that conforms to theUITextInput
protocol, such as aUITextView
).As an aside, you can also use the required properties & methods of the
UITextInput
to calculate theselectedRange
of aUITextField *textField
.-[UITextFieldDelegate textFieldDidChangeSelection:]
Although,
UITextFieldDelegate
doesn't declare atextFieldDidChangeSelection:
delegate method like-[UITextViewDelegate textViewDidChangeSelection:]
, you can still hook into when the selection of aUITextField
has changed. To do so, subclassUITextField
and use method swizzling to add your own code to thetextField.inputDelegate
's native implementation of-[UITextInputDelegate selectionDidChange:]
.我确实解决了我的查询,如下所示:
我实现了 UITextView 的委托并实现了以下方法
就是这样!
I did solve my query as follow :
I implement UITextView's delegate and implement following method
That's it!
Swift
在 Swift 中,从
UITextField
获取选定的文本是这样完成的:其中
textRange
是用于获取实际选定内容的UITextRange
文本。Swift
In Swift, getting the selected text from a
UITextField
is done like this:where
textRange
is aUITextRange
that is used to get the actual selected text.这里讨论了类似的主题:我可以选择UITextField 中的特定文本块?
AFAIK 如果选择文本,则不会发生任何事件。但是,您可以设置 NSTimer 来监视文本字段并检查
_selectedRange
。如果发生变化,请启动文本转语音代码。编辑:我的选择是错误的。 UITextField 无法实现您想要实现的目标。但是,如果您使用 UITextView,则可以实现其 UITextViewDelegate 并覆盖
其中,您可以使用 selectedRange 属性来获取选择。有关详细信息,请参阅此参考:
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextView_Class/Reference/UITextView.html#//apple_ref/doc/uid/TP40006898-CH3- SW13
A similar topic is discussed here: Can I select a specific block of text in a UITextField?
AFAIK there is no event if text is selected. However, you could setup an NSTimer to watch your textfield and check the
_selectedRange
. If it changes, go fire up your text-to-speech code.EDIT: I was wrong about the selection. UITextField cannot do what you want to achieve. But if you use
UITextView
instead, you can implement its UITextViewDelegate and overrideIn there, you can use the
selectedRange
poperty to get the selection. See this reference for details:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextView_Class/Reference/UITextView.html#//apple_ref/doc/uid/TP40006898-CH3-SW13
UITextField 没有委托来获取选择范围更改。我们可以使用 KVO 来观察
UITextfield
的selectedTextRange
属性。或者创建
UITextField
子类并重写setSelectedTextRange
方法。UITextField don't have delegate to get the selection range change. We can use KVO to observe
selectedTextRange
property ofUITextfield
.Or create
UITextField
subclass and overridesetSelectedTextRange
method.