2012-04-18 15 views
18

私は今、私は私のテキストの垂直方向の配置をしたいし、それがテキストの長さに応じて調整可能である必要があり、NSTextField垂直アライメント

NSView *superView = [[NSView alloc] initWithFrame:NSMakeRect(0, 300, 1400, 500)]; 
NSTextField *myTextField = [[NSTextField alloc] initWithFrame:NSMakeRect(180, 100, 1000, 300)]; 
[myTextField setStringValue:myText]; 
[myTextField setEditable:NO]; 
[myTextField setBezeled:NO]; 
[myTextField setDrawsBackground:NO]; 
[myTextField setSelectable:NO]; 
[myTextField setFont:[NSFont fontWithName:@"Futura" size:22]]; 
[superView addSubview:myTextField]; 
[superView setAutoresizesSubviews:YES]; 
[myTextField setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; 
[self.window.contentView addSubview:superView]; 

を私はプログラムでこのようNSTextFieldを作成したココアのアプリを作成しています。
ご意見はありますか?あなたの提案を教えてください:)

多くのありがとう!

答えて

11

あなたが望むものはありますが、NSTextFieldCellのサブクラスを作成し、そのサブクラスをNSTextFieldで使用する必要があります。あなたがオーバーライドしたいキーの方法がdrawingRectForBounds:selectWithFrame:、この程度editWithFrame:

Here is a blog post from the fantastic Daniel Jalkutあり、彼も行く準備ができてダウンロード可能なバージョンが含まれています。投稿はかなり古いですが、それでも正常に動作するはずです。

+0

ありがとうsosborn .. !!私はこれを試してみましょう..これに何か問題があれば私はあなたに戻ってきます。 :) – iUser

+0

私は 'RSVerticallyCenteredTextFieldCell.h'と' RSVerticallyCenteredTextFieldCell.m'クラスを持っていますが、私は 'myTextField'を使ってそれを使う方法を知りません。 – iUser

+0

NSControl(NSTextFieldが継承する)を見てください。 setCellClass:というメソッドがあります。 Appleの「コントロールとセルプログラミングガイド」のドキュメントも読むのは良いことです。 – sosborn

1

テキストフィールドを文字列サイズに調整するには、フレームを設定してテキストフィールドのサイズを調整する前に、テキストサイズをNSStringsizeWithFont: constrainedToSize: lineBreakMode:で計算する必要があります。

これは、question(およびその回答)をご覧ください。

+1

@iUserは、UITextFieldとは異なるNSTextFieldについて質問しています。 NSTextFieldにはcontentVerticalAlignmentプロパティがありません。 – sosborn

+0

サンクスカイ.. !!私は 'contentVerticalAlignment'オプションを与えていない' NSTextField'を使用しています。なにか提案を ? – iUser

+0

申し訳ありません。私はちょうど私の答えを変えた。 –

-1

この時点で、ViewWillDrawをオーバーライドし、親ビューの中央にNSTextFieldを配置します。これはライブのサイズ変更でも機能します。この時点でフォントサイズを調整して、新しいサイズに合ったフォントを見つけることもできます。

+0

あなたのdownvoteを説明し、これは2015年に答えられたことに注意してください。これは、受け入れられた答えに似ています、NSTextFieldCellでカスタム図面を作るのではなく、NSTextFieldで行います。 –

関連する問題