2013-09-22 17 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輸入文本。我將從其他資源中獲取我無法更改的文本 –