我正在开发iPhone中的文本到语音应用程序,
其中有一个输入文本字段,我希望用户从文本字段中选择部分文本,我的应用程序会将所选文本转换为语音。
我的问题是如何获取用户从文本字段中选择的文本?
答案 0 :(得分:28)
-[UITextField selectedText]
虽然UITextField
没有selectedText
方法,但它符合UITextInput
protocol。因此,您可以使用所需的属性和UITextInput
协议的方法,用于确定selectedText
的{{1}}(或符合UITextField *textField
协议的任何对象,例如UITextView
)。< / p>
UITextInput
除此之外,您还可以使用所需的属性&amp; NSString *selectedText = [textField textInRange:textField.selectedTextRange];
NSLog(@"selectedText: %@", selectedText);
的方法来计算UITextInput
的{{1}}。
selectedRange
UITextField *textField
虽然UITextRange *selectedTextRange = textField.selectedTextRange;
NSUInteger location = [textField offsetFromPosition:textField.beginningOfDocument
toPosition:selectedTextRange.start];
NSUInteger length = [textField offsetFromPosition:selectedTextRange.start
toPosition:selectedTextRange.end];
NSRange selectedRange = NSMakeRange(location, length);
NSLog(@"selectedRange: %@", NSStringFromRange(selectedRange));
没有声明像-[UITextViewDelegate textViewDidChangeSelection:]
这样的-[UITextFieldDelegate textFieldDidChangeSelection:]
委托方法,但您仍然可以在选择UITextFieldDelegate
时进行更改。为此,请继承textFieldDidChangeSelection:
并使用方法调配将您自己的代码添加到UITextField
的{{3}}本机实现中。
UITextField
答案 1 :(得分:6)
我确实按照以下方式解决了我的问题:
我实现了UITextView的委托并实现了以下方法
- (void)textViewDidChangeSelection:(UITextView *)textView {
NSRange r = textView.selectedRange;
NSLog(@"Start from : %d",r.location); //starting selection in text selection
NSLog(@"To : %d",r.length); // end position in text selection
NSLog([tv.text substringWithRange:NSMakeRange(r.location, r.length)]); //tv is my text view
}
就是这样!
答案 2 :(得分:2)
在Swift中,从UITextField
获取所选文本的方式如下:
if let textRange = myTextField.selectedTextRange {
let selectedText = myTextField.textInRange(textRange)
}
其中textRange
是UITextRange
,用于获取实际选定的文字。
答案 3 :(得分:1)
此处讨论了类似的主题:Can I select a specific block of text in a UITextField?
AFAIK如果选择了文字则没有事件。但是,您可以设置NSTimer来观看文本字段并检查_selectedRange
。如果它发生变化,请启动您的文字转语音代码。
编辑:我对选择错了。 UITextField无法实现您想要实现的目标。但是,如果您使用UITextView
,则可以实现其UITextViewDelegate并覆盖
- (void)textViewDidChangeSelection:(UITextView *)textView
在那里,您可以使用selectedRange
字符来进行选择。有关详细信息,请参阅此参考:
答案 4 :(得分:0)
UITextField没有委托来更改选择范围。我们可以使用KVO来观察selectedTextRange
的{{1}}属性。
UITextfield
或创建 [textField addObserver:self forKeyPath:@"selectedTextRange" options:NSKeyValueObservingOptionNew context:NULL];
子类并覆盖UITextField
方法。