3

Cocoa のテキスト フィールドの背景として画像を使用することは可能ですか? もしそうなら、どのように?

4

2 に答える 2

4

これが「正しい」方法であるかどうかはわかりませんが、最初に頭に浮かぶのは、NSTextField のカスタム サブクラスを作成することです。これは、おおよそ次のようになります。

- (void)awakeFromNib
{
    [self setDrawsBackground:NO];
}

- (void)drawRect:(NSRect)rect
{
    [super drawRect:rect];

    [self lockFocus];
    [[NSImage imageNamed:@"<#image filename#>"] drawInRect:rect
        fromRect:rect
        operation:NSCompositeSourceOver
        fraction:1.0];
    [self unlockFocus];
}

繰り返しますが、これは重要な部分の大まかな概要です。

とにかく、私が言ったように、これが本当に「正しい」方法であるかどうかはわかりませんが(または、「正しい」方法さえあれば)、これにより NSTextField の背景画像が得られます.

ジョシュアのコメントに応じて編集します (その小さな小さなコメント ボックスに十分なスペースを確保するつもりはありません)。

プロジェクトに画像を追加するには、画像をどこからでもプロジェクト ウィンドウ (プロジェクト ウィンドウの中央にあるファイルのメイン リスト。ただし、Xcode 編集環境の設定方法によっては、このあなたにとっては違うかもしれません)。

をサブクラス化するにNSTextFieldは、新しい Objective-C クラス ファイルを作成し ([ファイル] -> [新しいファイル…])、クラスがNSTextFieldではなくから継承するようにヘッダーを編集しNSObjectます。つまり、ヘッダー ファイルは次のようになります。

#import <Cocoa/Cocoa.h>

@interface BGImageTextField : NSTextField
{
}

@end

コードの残りの部分については、実装ファイルの本体 (BGImageTextField.mたとえば )、具体的にはキーワード@implementation@endキーワードの間に追加することをお勧めします。

また、2つのことについて言及したいと思います。まず、Aaron Hillegass によるCocoa Programming for Mac OS Xのコピーを入手することをお勧めします。これは、今説明した Cocoa の基本のほとんどをカバーしており、Cocoa 全般を学習するための最良の方法の 1 つです。第二に、私のアプローチは機能しますが、おそらく最善のアプローチではありません。特に、この投稿を最近見つけたばかりなので、NSTextField を拡張するより良い方法を示唆しているようです。

于 2009-04-19T20:40:25.640 に答える
3

NSTextField をサブクラス化する代わりに、背景色を透過 [NSColor clearColor] にして、その背後に画像を置きます。

于 2009-04-20T18:19:22.773 に答える