2013-09-22 25 views
0

我有普通的NSString,我把它放到UITextView。当新行开始时,我需要搜索位置。我认为可以这样做,如果textview将字符串从 @"This is a big test string which i want to put into UITextView"转换为@"This is a\n big test \nstring which\n i want to\n put into\n UITextView" automaticaly。然后我可以搜索“\ n”并找到某行的位置。任何想法我怎么能做到这一点?添加 N到NSString或搜索UITextView中的位置

+0

你究竟在做什么?你想通过文本视图找到文本被包装到下一行的位置?为什么? – Wain

+0

@现在我比较文本的某些其他部分和站在某些手动行中的文本。如果可以使用此方法完成,它将看起来像从\ n到\ n的文本是该行。所以,当我说“比较这个文本和站在我的文本视图的第二行的文本”时,它必须这样做 –

回答

0

这不是UITextView的工作方式。在容器中放置文本的过程比查找换行符更复杂,并且不会生成包含NL字符的新字符串。

在iOS 7上,您可以使用UITextView的TextKit属性(layoutManager,textContainer,...)访问底层的布局组件,并查询它们以获取字符串部分的位置。

如果您必须支持较旧的iOS版本,则UITextInput协议中有characterRangeByExtendingPosition:inDirection:。您可以使用它来计算一行文本的范围。

+0

我所做的一切努力都失败了。你能写我如何从第三行获得文本(例如)?我非常感谢你的回答 –

+0

@IgorPrusyazhnyuk请告诉我们你的想法。使用上述API的问题究竟在哪里? –

+0

NSString * firstString; //假定大字符串 UITextView * myTextView = [[UITextView alloc] init]; myTextView.frame = CGRectMake(100,100,300,400); myTextView.text = firstString; UITextRange * myRange = [myTextView characterRangeByExtendingPosition:[myTextView closestPositionToPoint:CGPointMake(10,10)] inDirection:UITextLayoutDirectionRight]; UITextPosition * myTextPosition = [myRange start]; int position = [myTextView offsetFromPosition:myTextView.beginningOfDocument toPosition:myTextPosition]; '任何时候输出总是0.假设10,10是行的开始 –

0

我在应用程序中计算“\ n”以知道何时隐藏键盘。而不是计数\ ns,您可以计算其他字符以获得您的“\ n”位置。行只计算“\ n”的数量,并在视图加载时重置为零。

// dismiss keyboard from text view with return key 
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    if([text isEqualToString:@"\n"]) { 

     rows++; 

     if (rows >= 2){ 

      // resign text view 
      [self.quotationTextView resignFirstResponder]; 

      return NO; 
     }else{ 
      return YES; 
     } 
    }else{ 
     rows = 0; 
    } 


    return YES; 
} 
+0

用户不会向UITextView输入文本。我将从其他资源中获取我无法更改的文本 –