14

私はココアで2時間苦労していますが、成功していません。ツールバーにカスタム ビューを追加したいと考えています。そこで、ウィンドウに NSToolbar を (IB を使用して) 追加し、ビューを追加しました (これは完全に機能します)。IB は NSToolbarItem を自動的に作成しました。Apple の指示に従いました: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Toolbars/Tasks/AddRemoveToolbarItems.html#//apple_ref/doc/uid/20000755-BBCGJCDJ

問題は、ウィンドウにラベルが表示されているにもかかわらず、ビューが表示されないことです。

描画に使用するコードは次のとおりです(非常に単純で、テスト目的です)

- (void)drawRect:(NSRect)dirtyRect {
    [[NSColor blackColor] set];
    [[NSBezierPath bezierPathWithRect:self.bounds] fill];
}

誰かが私を助けることができますか?

前もって感謝します。

4

2 に答える 2

19

問題を解決しました。

カスタム ビューを nib のルートに配置しました。従来の NSToolbarItem を追加し、カスタム ビュー用と NSToolbarItem 用の 2 つのアウトレットを作成しました。で、カスタム ビューで NSToolbarItem を呼び出しました-(void)awakeFromNibsetView:

インターネット上のいくつかのリソースによると、これは Interface Builder のバグです。

于 2011-02-15T21:34:16.823 に答える
7

http://www.mail-archive.com/cocoa-dev@lists.apple.com/msg35673.htmlで議論されている Apple エンジニアによると、Interface Builder にバグがあり、「カスタム ビュー」(作成された NSViews) NSToolbarItem のビューとして使用すると正しくデコードされないため、ツールバーに表示されません。NSButtons や NSBoxes などの他の種類の NSViews は、ツールバー アイテムとして問題なく機能します。これらを Interface Builder で作成し、ツールバーにドラッグしてツールバー アイテムにすることができます。

(上記のリンクの議論は、バグが実行時に XIB から「カスタム ビュー」を作成する方法にあることを意味します: initWithCoder: の代わりに initWithFrame: を使用します。議論は 2009 年から行われていますが、これは現在も修正されていません。 XCode 4.5/OS X 10.8.)

私の場合、カスタム NSView サブクラスを実装するのではなく、通常の NSView を使用して一連のコントロール (ボリューム スライダーと最小/最大ボタン) をラップしていました。NSView の代わりに NSBox をコンテナーとして使用することで、この問題を回避することができました。NSBox を透明、タイトルなし、ボーダなしにしたので、それ以外の場合はプレーンな NSView ラッパーとまったく同じように動作しました。これは IB ではもう少し手間がかかりましたが、プログラムでビューをツールバー項目に接続する手間が省けました。

于 2012-12-29T17:15:01.977 に答える