タイトル鶴薗賢吾のCocoaはやっぱり!出張版》#6 - ツールバー(7)カテゴリーユーザインタフェース, Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版
作成日2001/12/17 23:0:10作成者新居雅行
では、ここで出てきたメソッドを一気に紹介します。

 ★ NSToolbarItem : ラベル名を取得する
  [書式] - (NSString *) label
  [出力] 返り値 : ラベル名
  [備考] ラベル名とは、ツールバー上の各アイテムの下部に表示されるの名称

 ★ NSToolbarItem : ラベル名を変更する
  [書式] - (void) setLabel : (NSString *) label
  [入力] label : 変更するラベル名
  [出力] 返り値 :

 ★ NSToolbarItem : パレットラベル名を取得する
  [書式] - (NSString *) paletteLabel
  [出力] 返り値 : パレットラベル名
  [備考] パレットラベル名とは、設定パネル上の各アイテムの
      下部に表示される名称

 ★ NSToolbarItem : パレットラベル名を変更する
  [書式] - (void) setPaletteLabel : (NSString *) paletteLabel
  [入力] paletteLabel : 変更するパレットラベル名

 ★ NSToolbarItem : ツールチップを取得する
  [書式] - (NSString *) toolTip
  [出力] 返り値 : ツールチップ
  [備考] ツールチップとは、ツールバー上の各アイテムにマウスを重ねた時に
      表示される簡易ヘルプのこと

 ★ NSToolbarItem : ツールチップを変更する
  [書式] - (void) setToolTip : (NSString *) toolTip
  [入力] toolTip : 変更するツールチップ

 ★ NSToolbarItem : ターゲットを取得する
  [書式] - (id) target
  [出力] 返り値 : ターゲット

 ★ NSToolbarItem : ターゲットを変更する
  [書式] - (void) setTarget : (id) target
  [入力] target : 変更するターゲット
  [備考] イメージアイテムにのみ有効

 ★ NSToolbarItem : アクションを取得する
  [書式] - (SEL) action
  [出力] 返り値 : アクション

 ★ NSToolbarItem : アクションを変更する
  [書式] - (void) setAction : (SEL) action
  [入力] action : 変更するアクション
  [備考] イメージアイテムにのみ有効

 ★ NSToolbarItem : メニューを取得する
  [書式] - (NSMenuItem *) menuFormRepresentation
  [出力] 返り値 : メニュー

 ★ NSToolbarItem : メニューを変更する
  [書式] - (void) seMenuFormRepresentation : (NSMenuItem *) menuItem
  [入力] menuItem : 変更するメニュー

 ★ NSToolbarItem : 画像を取得する
  [書式] - (NSImage *) image
  [出力] 返り値 : 画像
  [備考] イメージアイテムにのみ有効

 ★ NSToolbarItem : 画像を変更する
  [書式] - (void) setImage : (NSImage *) image
  [入力] image : 変更する画像
  [備考] このメソッドを実行することによってイメージアイテムになる

 ★ NSToolbarItem :ビューを取得する
  [書式] - (NSView *) view
  [出力] 返り値 : ビュー
  [備考] ビューアイテムにのみ有効

 ★ NSToolbarItem : ビューを変更する
  [書式] - (void) setView : (NSView *) view
  [入力] image : 変更するビュー
  [備考] このメソッドを実行することによってビューアイテムになる

―――――インスタンス取得メソッドの詳細

これで、ツールバーアイテムの辞書が出来ましたので、この辞書を主に使うインスタンス取得メソッドの toolbar : itemForItemIdentifier : willBeInsertedIntoToolbar : を詳しく見ていきましょう。

◇Controller.m → toolbar : itemForItemIdentifier : willBeInsertedIntoToolbar :

- (NSToolbarItem *) toolbar : (NSToolbar *) toolbar
itemForItemIdentifier : (NSString *) itemIdentifier
willBeInsertedIntoToolbar : (BOOL ) flag {

NSToolbarItem *newItem = [ [ [ NSToolbarItem alloc ]
initWithItemIdentifier : itemIdentifier ]
autorelease ]; // アイテムを作成
// アイテム辞書から取り出し
NSToolbarItem *item = [ toolbarItems objectForKey : itemIdentifier ];

// 以降でコピーする
[ newItem setLabel : [ item label ] ]; // ラベルをコピー
[ newItem setPaletteLabel : [ item paletteLabel ] ]; // パレットラベルをコピー

// ビューと画像をコピー
if ( [ item view ] != NULL ) { [ newItem setView : [ item view ] ]; }
else { [ newItem setImage : [ item image ] ]; }

[ newItem setToolTip : [ item toolTip ] ]; // ツールチップをコピー
[ newItem setTarget : [ item target ] ]; // ターゲットをコピー
[ newItem setAction : [ item action ] ]; // アクションをコピー
// メニューをコピー
[ newItem setMenuFormRepresentation : [ item menuFormRepresentation ] ];

if ( [ newItem view ] != NULL ) { // ビューアイテムならサイズを設定
[ newItem setMinSize : [ [ item view ] bounds ].size ];
[ newItem setMaxSize : [ [ item view ] bounds ].size ];
}

return newItem;

}

先程説明しましたが、アイテム辞書に登録されているインスタンスをコピーしてメソッドの返り値にしています。わざわざコピーをしなければ以下のようになりますが、コピーするには理由があります。アプリケーションにツールバーを表示するウィンドウが1つしかない場合は、以下のように辞書の中にあるインスタンスを返す書き方でも構いません。

- (NSToolbarItem *) toolbar : (NSToolbar *) toolbar
itemForItemIdentifier : (NSString *) itemIdentifier
willBeInsertedIntoToolbar : (BOOL ) flag {

return [ toolbarItems objectForKey : itemIdentifier ];
}

しかしながら、複数のウィンドウにツールバーを表示する場合は、ツールバー毎にツールバーアイテムのインスタンスを作る ( つまりコピーする ) のが一般的です。というのは、ウィンドウ毎にツールバーアイテムの状態が異なる可能性があるためです。例えば、ドキュメントの保存のボタンをツールバーアイテムとして表示している場合、ドキュメントに変更のあった場合のみツールバーアイテムは使えるべきです。ドキュメントが変更されているかどうかというのは、ウィンドウ単位で異なるため、同じインスタンスを共有してはいけないということになります。

ものによっては、アプリケーションの状態によってツールバーアイテムの状態が変化するというのもあるでしょう。こういう場合は、コピーしなくてもよいということになります。

最後の方でsetMinSize : とsetMaxSize : というメソッドを呼んでいますが、これによってアイテムサイズの最大値と最小値を指定できます。最小値よりも最大値の方が横幅が広くなっていると、アイテムがウィンドウの幅に応じて伸縮します。これは、ビューアイテムにのみ有効です。また、伸縮するのは、カスタムビューの背景なので、中に配置している部品も連動させたい場合は、以下のようにAutosizingの設定をしておく必要があります。

◇伸縮するアイテムのオートサイズの設定と実行結果
 

 ★ NSToolbarItem : 最大サイズを取得
  [書式] - (NSSize) maxSize
  [出力] 返り値 : 最大サイズ

 ★ NSToolbarItem : 最大サイズを変更
  [書式] - (void) setMaxSize : (NSSize) size
  [入力] size : 変更する最大サイズ
  [備考] ビューアイテムにのみ有効

 ★ NSToolbarItem : 最小サイズを取得
  [書式] - (NSSize) minSize
  [出力] 返り値 : 最小サイズ

 ★ NSToolbarItem : 最小サイズサイズを変更
  [書式] - (void) setMinSize : (NSSize) size
  [入力] size : 変更する最小サイズ
  [備考] ビューアイテムにのみ有効
(この項続く)
[鶴薗賢吾]
関連リンクCocoaはやっぱり!