如何从iphone中的uitextfield中选择文本?

时间:2011-03-08 08:58:43

标签: ios iphone textfield

我正在开发iPhone中的文本到语音应用程序,

其中有一个输入文本字段,我希望用户从文本字段中选择部分文本,我的应用程序会将所选文本转换为语音。

我的问题是如何获取用户从文本字段中选择的文本?

5 个答案:

答案 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)

}

其中textRangeUITextRange,用于获取实际选定的文字。

答案 3 :(得分:1)

此处讨论了类似的主题:Can I select a specific block of text in a UITextField?

AFAIK如果选择了文字则没有事件。但是,您可以设置NSTimer来观看文本字段并检查_selectedRange。如果它发生变化,请启动您的文字转语音代码。

编辑:我对选择错了。 UITextField无法实现您想要实现的目标。但是,如果您使用UITextView,则可以实现其UITextViewDelegate并覆盖

- (void)textViewDidChangeSelection:(UITextView *)textView

在那里,您可以使用selectedRange字符来进行选择。有关详细信息,请参阅此参考:

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextView_Class/Reference/UITextView.html#//apple_ref/doc/uid/TP40006898-CH3-SW13

答案 4 :(得分:0)

UITextField没有委托来更改选择范围。我们可以使用KVO来观察selectedTextRange的{​​{1}}属性。

UITextfield

或创建 [textField addObserver:self forKeyPath:@"selectedTextRange" options:NSKeyValueObservingOptionNew context:NULL]; 子类并覆盖UITextField方法。