2012-08-03 109 views
9

有沒有辦法來橢圓化NSTextField的文本內容,而不是截斷?橢圓NSTextField?

所以不是:

The quick brown fox jumped over 

它會說:

The quick brown fox jumped ... 

我找不到這個文檔中任何事情。我錯過了什麼?

更新: 有沒有什麼辦法可以用ellipsize和wordwrap - 換句話說,有多行並且最後一個省略號?

+0

我以爲選擇截斷或'NSLineBreakByTruncatingTail'自動執行橢圓 - – Vervious 2012-08-03 23:20:36

+0

乍得,如果你給了我賞金謝謝,現在我感覺不好,因爲我沒有真正回答你的問題。有人對我進行了恐嚇(低估了答案),非常有趣,我只是回顧了這個問題和你的更新。我確實有一個建議,現在就編輯我的答案。 – 2012-09-21 15:07:08

+0

沒問題,@DavidH!你回答了最初提出的問題 - 我忽略了包含使問題變得困難的「ellipsize和wordwrap」部分。歡迎您來到賞金 - 感謝您加入的想法! – 2012-09-21 16:26:38

回答

7

所以這是一個很好的問題!即使它暴露在IB中,它也不是視圖或子視圖上的屬性。相反,它被埋在NSTextField使用的單元格中。因此,如果您向該單元格請求該對象,則可以讀取或設置值:lineBreakMode。

查看NSCell的所有選項的類描述 - truncateCenter是一個(用於獲取中心省略號)。

編輯:更新後的問題提示以下想法。就個人而言,我認爲試圖獲得谷歌代碼是有點矯枉過正,也許你可以通過創建一個小自定義的textField來做一些不那麼複雜的事情。

  • 創建一個客戶的NSView對象,並給它一個字符串,字體屬性以及與下面的一些行動的方法,甚至width屬性

  • 基本思想是利用可可的NSString類它可以讓你從一個字符串/字體組合中確定字符串的長度(也可能是它的高度)(我在UIKit中使用它,在Cocoa中使用過等效,但它已經有一段時間了......)

  • 其中之一視圖的方法將是'計算'。當你得到這個時,使用單個空格作爲分隔符將字符串轉換爲一個單詞數組(或使其更復雜)。然後,開始計算繪製的字符串的長度,首先進行工作,追加空格和第二個等,直到發現超出了他的寬度。這是你的第一行字符串。

  • 繼續執行此操作以獲取要繪製的行數(2?3?)。計算一下unicode字符串的長度 - 我記得它的選項分號 - 然後保持這個長度。

  • 在最後一行中,不斷添加單詞,直到超過長度,然後一次備份一個單詞,驗證最後附加的字符串字符串(減去尾隨空格)但使用'...' char將會適合這個空間。

  • 您可以通過周圍的邊框等

  • 添加填充,一旦計算完成使這個票友(你當然緩存中沒有答案的所有位),當它到達'你的看法準備的drawRect:......「。您在位置(0,bounds.size.height - 21),並繪製第一線段,然後向下移動21點,畫第二行等

如果我編寫這個我會計劃2-4小時 - 這不是微不足道的,也許這個邏輯有點複雜,但它很簡單。祝你好運!

+1

NSTextView沒有單元 - 你的意思是NSTextField對嗎? – Vervious 2012-08-04 00:33:18

+0

對 - 我更新了我的文字以反映我的錯字 - 感謝和向上的箭頭:-) – 2012-08-04 00:40:44

+0

好的,現在就爲您的答案+1! – Vervious 2012-08-04 00:46:50