Iphone 如何计算UITextView中NSString在特定位置的NSRange

Iphone 如何计算UITextView中NSString在特定位置的NSRange,iphone,nsstring,uitextview,Iphone,Nsstring,Uitextview,当我点击UITextView中的某个位置时,我想检索NSString的子字符串,该字符串显示在第行 例如,我有一个UITextView,它显示一个字符串,使用16行。当我点击位置(200、150)时,我想要点击UITextView显示的子字符串 关于如何实现这一点有什么建议吗?如果我正确理解了您的问题,这是一个可能的解决方案。在viewcontroller中,将IBOutlet添加到UITextView,并确保viewcontroller实现UITextViewDelegate。在Interfa

当我点击UITextView中的某个位置时,我想检索NSString的子字符串,该字符串显示在第行

例如,我有一个UITextView,它显示一个字符串,使用16行。当我点击位置(200、150)时,我想要点击UITextView显示的子字符串


关于如何实现这一点有什么建议吗?

如果我正确理解了您的问题,这是一个可能的解决方案。在viewcontroller中,将IBOutlet添加到UITextView,并确保viewcontroller实现UITextViewDelegate。在InterfaceBuilder中将UITextView连接到文件所有者时,请确保还将UITextView的委托指向文件所有者

@interface StackOverFlowViewController : UIViewController<UITextViewDelegate> {

    IBOutlet UITextView *textView;
}
@end
然后,每次在UITextView中进行选择时,都会调用此方法。使用UITextView的selectedRange属性获取用户所做的NSRange。从那里,您可以从UITextView获取文本并生成正确的子字符串


我刚刚在textViewDidChangeSelection方法中添加了一个UIAlertView来显示子字符串

您必须将
UITextView设置为可选择和可编辑。但是,当您选择时,键盘会显示出来,这会让用户感到奇怪。我试图在
KeyboardDidShow
事件中隐藏键盘(通过辞职FirstResponder),但
NSRange
将不正确,尤其是当您滚动
UITextView
并选择时。如果将
UITextView
设置为可选择但不可编辑,则必须长按才能获得
TextViewDidChangeSelection
事件,但键盘不会显示,则
NSRange
将是正确的

后来,我找到了一个解决问题的完美方法,将键盘移动到远处,这样您就不需要长时间按键盘,只需轻触即可获得准确的NSRange。代码如下:

  • 了解如何控制键盘:

    //在公共区域定义 UIView*系统键盘

    //如果textView可编辑且可选择,触摸textView将触发事件。不再使用键盘显示事件

    -(BOOL)文本视图应开始编辑:(UITextView)文本视图{ NSLog(@“textViewShouldBeginEditing”); 如果(!系统键盘){ UIWindow window1=[UIApplication sharedApplication].windows[1]; 对于(int i=0;i
  • 在textViewDidChangeSelection事件中获取NSRange:

    //触摸文本视图也将触发该事件 -(无效)textViewDidChangeSelection:(UITextView*)textView { NSLog(@“textViewDidChangeSelection”); NSRange range=[sermonTextView selectedRange]; }

  • 在其他应开始编辑的情况下向后移动键盘:

    //您必须在某个位置关闭键盘,例如,如果您还有一个搜索栏将使用键盘,您现在应该显示键盘。 -(BOOL)搜索栏应开始编辑:(UISearchBar*)搜索栏{ NSLog(@“搜索栏应开始编辑”); if(系统键盘){ CGRect rec1=systemKeyboard.frame; systemKeyboard.frame=CGRectMake(0,0,rec1.size.width,rec1.size.height); //无需[sermonTextView辞职FirstResponder]; //无需[searchBar1成为第一响应者]; } ......... 返回YES; }


  • 是否在UITextView中选择/突出显示文本?
    - (void)textViewDidChangeSelection:(UITextView *)aTextView {
    
      NSRange rangeOfSelection = textView.selectedRange;
      NSString *selectedText = [textView.text substringWithRange:rangeOfSelection];
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Selection Changed" message:selectedText delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
      [alert show];
      [alert release];
    }