2012-07-14 56 views
12

一個字的Y座標我問一個開發商(TwoLivesLeft,CODEa所的創建者)他們是如何做到語法,在其應用突出。他回答說:獲取X和UITextView的

@ TD2 Codea編輯器是使用UITextView實現的。突出顯示的 是通過在適當的 職位中覆蓋子視圖完成的 - 通常是UILabels。他們從重用池中出列,類似於UITableViewCells的工作方式 。在滾動期間,行 要求重新突出顯示拉出標記池和行, 已經離開屏幕轉儲他們的標記回到池中。

任何人都可以解釋我將如何得到某個單詞的x和y?

+0

以下是操作方法。 https://discussions.apple.com/thread/2511930?start=0&tstart=0 – 2012-07-14 18:14:30

回答

33

UITextView的符合UITextInput,它的詳細描述可以發現here。看看所需要的方法「textRangeFromPosition:toPosition:」,「positionFromPosition:offset:」,「positionFromPosition:inDirection:offset:」,以及UITextInput協議中的其他一些基於幾何的方法。這些可能會提供您正在尋找的功能。

我還沒有真正嘗試過,以確保這些工作,你希望他們過的方式,但看起來像它你需要什麼。

讓我知道你是否需要任何幫助!


UPDATE:

這裏是如何做到這一點一些示例代碼。我結束了「firstRectForRange:」方法的工作。該代碼基本上採用UITextView「textStuff」的最後三個字母並將其突出顯示爲綠色。

UITextView *textStuff = [[UITextView alloc] init]; 
textStuff.frame = CGRectMake(2.0, 200.0, 200.0, 40.0); 
textStuff.text = @"how are you today?"; 
textStuff.textColor = [UIColor blackColor]; 

UITextPosition *Pos2 = [textStuff positionFromPosition: textStuff.endOfDocument offset: nil]; 
UITextPosition *Pos1 = [textStuff positionFromPosition: textStuff.endOfDocument offset: -3]; 

UITextRange *range = [textStuff textRangeFromPosition:Pos1 toPosition:Pos2]; 

CGRect result1 = [textStuff firstRectForRange:(UITextRange *)range ]; 

NSLog(@"%f, %f", result1.origin.x, result1.origin.y); 

UIView *view1 = [[UIView alloc] initWithFrame:result1]; 
view1.backgroundColor = [UIColor colorWithRed:0.2f green:0.5f blue:0.2f alpha:0.4f]; 
[textStuff addSubview:view1]; 

運行此代碼的結果:

enter image description here

+0

你有一個開始的代碼,可以給我一些推動? – Sirens 2012-07-15 14:08:12

+0

我用一些示例代碼更新了答案。從那裏開始並修改它,使其按照您想要的方式工作。 – bddicken 2012-07-15 22:08:43

+0

這個工作適合你嗎?如果是的話,我將不勝感激地接受它。 – bddicken 2012-07-17 17:47:09

5

@ bddicken的https://stackoverflow.com/a/11487125/3549781作品就像一個魅力。但問題是,如果文本中包含換行符「\ n」,它不適用於iOS 7或更高版本。經過大量搜索後,我找到了一個解決方案。

您必須確保TextView的佈局調用firstRectForRange前:通過

[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer]; 

禮貌:UITextView firstRectForRange not working when there's new line characters in the mix

P.S:首先我加入這個以@ bddicken的答案評論。由於大多數人不閱讀評論,我添加了這個答案。