Geometry 関数
NSBundle
NSDictionary
NSFileManager
NSMutableAttributedString
NSNumber
NSScanner
NSString
NSTimer
Graphic 関数
NSApplication
NSBezierPath
NSCell
NSColor
NSCursor
NSCustomImageRep
NSDocument
NSDocumentController
-NSDocumentController のサブクラスを使う
-NSDocumentController のオープンダイアログを拡張する
NSDragging
NSEvent
NSFontManager
NSGraphicsContext
NSImage
NSMenu
NSOutlineView
NSPanel
NSPopUpButton
NSResponder
NSScrollView
NSString 追加
NSTableColumn
NSTableView
NSTextStorage
NSTextView
NSToolbar
NSView
NSWindow
NSWorkspace
その他
.nib ウィンドウ
Views パレット
クラス
インスタンス変数
メソッド
CFXML
Carbon Event
Carbon Graphics
Cocoa で日本語
メソッド
その他

- Application Kit-
NSDocumentController

Application Kit - NSDocumentController
NSDocumentController のサブクラスを使う
Keywords: NSDocumentController subclass

NSDocumentController は、ドキュメント・ベース・アプリケーションで Document を管理する根幹のクラス。こいつのインスタンスは、アプリケーションで最大 1 つしか作られないんだ。NSDoucmentController の動きを制御するには、こいつのサブクラスを作ればいいんだけど、さてどうやってインスタンスをつくればいいんだ?

NSDocumentController のインスタンスは、クラスメソッドである sharedDocumentController が呼ばれた時点で作られるらしい。ということは、それより先に NSDocumentController のサブクラスを作ってしまえば、そっちが使われるはずだ。

そのためにはどうすればいいのか?ここでは .nib の中でインスタンスを作る、という技を使ってみよう。ターゲットで設定する「メイン nib ファイル」は、アプリケーションが起動するときに呼び出されるようだ。その中に NSDocumentController のサブクラスのインスタンスを置いておけば、メイン nib ファイルが読み込まれた時点でインスタンスが作られるんだ。

MyDocument... っていうのは、MyDocumentController のことで、NSDocumentController のサブクラス。こうすれば、NSDocumentController のサブクラスを使うことができるぜ。


Application Kit - NSDocumentController
NSDocumentController のオープンダイアログを拡張する
Keywords: setAccessoryView

Cocoa でドキュメント・ベース・アプリケーションを作ると、メニューの「開く」を選択すると、勝手にオープンダイアログが出てくるよね。これはこれで便利なんだけど、このダイアログを拡張したいときはどうすればいいんだ?

それには、NSDocumentController のサブクラスを作って対処する。まず、上で見た方法で NSDocumentController のサブクラスを作ろう。そしたら、そのサブクラスで runModalOpenPanel:forTypes: をオーバーライドする。

Application Kit/NSDocumentController.h
- (int)runModalOpenPanel:(NSOpenPanel *)openPanel 
                forTypes:(NSArray *)extensions;

このメソッドは、引数の openPanel を表示させるためのものだ。親クラス(つまり NSDocumentController)がオープンダイアログを表示する前に、openPanel をいじってしまえばいいのだ。

というわけで、サンプル。ここでは openPanel に、エンコーディングのためのアクセサリビューを追加している。

OpenWithEncoding/MyDocumentController.m
- (int)runModalOpenPanel:(NSOpenPanel*)openPanel 
                forTypes:(NSArray*)extensions
{
    // アクセサリビューを設定する
    [openPanel setAccessoryView:_accessoryView];
    
    return [super runModalOpenPanel:openPanel forTypes:extensions];
}

これでオープンダイアログの見た目が変わるぜ。実行結果はこんな感じだ。

■サンプルダウンロード:
OpenWithEncoding.tar.gz



[Home] [Download] [Archives] [BBS] [Cocoa Programming Tips 1001] [Core Foundation の秘密] [Safari Developer Center] [はじめてのブラウザのつくり方] [Sketch BP] [スクリーンセイバーを作ろう] [Objective-C 最適化] [Authorization API 完全理解] [Mac OS X Programming Books Review] [オブジェクト指向の言語比較論] [panther-dev]

mailto: mkino@xd5.so-net.ne.jp