11

切り捨てる代わりに、NSTextFieldのテキストコンテンツを楕円化する方法はありますか?

したがって、代わりに:

The quick brown fox jumped over

それは言うでしょう:

The quick brown fox jumped ...

このためのドキュメントには何も見つかりません。私は何が欠けていますか?

更新:ellipsize AND wordwrapする方法はありますか?つまり、複数の行を持ち、最後の行をellipsizeしますか?

4

2 に答える 2

7

これは素晴らしい質問です。IB で公開されていますが、ビューまたはサブビューのプロパティではありません。代わりに、NSTextField によって使用されるセルのプロパティとして埋められます。したがって、そのオブジェクトにそのセルを要求すると、値を読み取ったり設定したりできます: lineBreakMode.

すべてのオプションについては、NSCell のクラスの説明を参照してください。truncateCenter は 1 つです (中央の省略記号を取得するため)。

編集:更新された質問によって、次の考えが促されました。個人的には、その Google コードを取得しようとするのはやり過ぎだと思います。おそらく、ミニカスタムの textField を作成することで、それほど複雑ではないことを行うことができます。

  • 顧客の NSView オブジェクトを作成し、文字列とフォントのプロパティ、および以下のアクションに関連するいくつかのメソッド、さらには幅のプロパティを指定します。

  • 本質的には、文字列/フォントの組み合わせから文字列の長さ (およびおそらくその高さ) を決定できる Cocoa NSString カテゴリを使用するという考えです (私はこれを UIKit で使用し、Cocoa で同等のものを使用しましたが、しばらくの間.. .)

  • ビューのメソッドの 1 つが「計算」になります。これを取得したら、区切り文字として単一のスペースを使用して、文字列を単語の配列に変換します (または、より複雑にします)。次に、描画された文字列の長さの計算を開始し、最初の作業を取り、幅を超えていることがわかるまで、スペースと 2 番目の作業を追加します。これが最初の線ストリングです。

  • 描きたい線の数だけこれを続けます (2? 3?)。... を行う unicode char の長さを計算します - 私が思い出したように、そのオプションのセミコロン - そしてそれを維持します。

  • 最後の行で、長さを超えるまで単語を追加し続け、一度に単語をバックアップして、最後に追加された文字列文字列 (末尾のスペースを差し引いたもの) が '...' 文字で収まることを確認しますスペース。

  • 境界線の周りにパディングを追加するなどして、これをより洗練されたものにすることができます。

  • 計算が完了すると (もちろん、答えのすべてのビットをキャッシュします)、'drawRect:...' を取得したときにビューが準備されます。(0, bounds.size.height - 21) に配置して最初のセグメントを描画し、次に 21 ポイント下に移動して 2 番目の線を描画します。

これをコーディングするとしたら、2 時間から 4 時間かかると思います。簡単なことではありません。ロジックが少し複雑かもしれませんが、単純明快です。幸運を!

于 2012-08-03T23:53:01.147 に答える
3

この古い質問では正しい答えは受け入れられませんでしたが - 最後の答えまでスクロールしてください - コードにはTruncate the last line of multi-line NSTextField のコードが含まれています

このソリューションには、楕円とライン ラッピングを組み合わせて使用​​することが含まれます。

于 2012-09-17T05:47:08.777 に答える