2011-03-25 71 views
3

我正在尋找相當於Android的Paint.breakText()的iOS目標c。IOS相當於Android的Paint.breakText()

我有一個字符串被放在一個矩形。如果不適合,我需要找到用省略號代替的字符的索引,然後放下字符串的其餘部分。

編輯:

截至,這個問題可以用UIKit的NSString的補充來解決詹姆斯貝德福德的回答提示。

[foo drawInRect:someRect withFont:someFont 
    lineBreakMode:UILineBreakModeTailTruncation]; 

UILineBreakModeTailTruncation,與附圖一起使用時,將省略號添加到字符串的末尾。

+0

NSString?或UITextView?或UITextField?需要更多。你想確保不超過一定的寬度? – 2011-03-25 16:08:11

回答

3

您是否嘗試過在NSString UIKit Additions category, referenced here中使用sizeWithFont:方法?

編輯:

盡我所能得到的是寫試圖想要使用這些sizeWithFont:方法,直到字符串可以不再被安裝到框中的字符串的長度每一種算法。此時,您知道您需要返回三個字符才能留出省略號的空間。您應該能夠將此算法優化爲O(log(n))。

+0

我一直在使用UIKit新增功能,但是我沒有看到如何使用這些方法中的任何一種將省略號添加到修剪或截斷的字符串。 – Axle 2011-03-25 16:20:39

+0

編輯答案.. – 2011-03-25 16:39:06

+0

要添加省略號,請使用:[NSString stringWithFormat:@「%@ ...」,myTruncatedString]; – 2011-03-25 16:46:44

4

我知道這不是你要求的,但最簡單的方法是使用UILabel,將其設置爲multiLine,然後它會截斷和ellipsize爲你。

現在說了這些,你可以使用CoreText來做你想做的事情。 CTFrameSetter和TypeSetters可以提供帶有索引的換行信息。

我會舉一個例子,但我還沒有使用這些類。

+2

關於UILabel的很好的一點。如果你可以使用這個,這可能是最好的方法。 – 2011-03-25 16:53:03