Controllerと たわむれる12-2
前回のつづき
つづき。第二弾。
変な所で切れてる事に気付いたので速攻で続き。
まず、ControllersWindowController
ControllersWindowController.h
#import <Cocoa/Cocoa.h> enum { typeUnknown = 0, typeList = 1, typeIcon = 2, typeFlow = 3, }; @class QLPreviewPanel; @class ControllersViewController; // 追加 @interface ControllersWindowController : NSWindowController { NSArray *contents; IBOutlet NSView *placeholder; IBOutlet NSArrayController *controller; ControllersViewController *viewController; // 変更 NSMutableDictionary *viewControllers; NSInteger viewType; QLPreviewPanel *previewPanel; } @property (retain) NSArray *contents; @property (assign) ControllersViewController *viewController; // 変更 @property NSInteger viewType; @property (retain) QLPreviewPanel *previewPanel; - (IBAction)togglePreviewPanel:(id)seder; @end
viewControllerをControllersViewControllerに変更しました。
ControllersWindowController.m の一部
(snip) - (void)switchViewByType:(NSInteger)type { (snip) [placeholder addSubview:view]; previewPanel.delegate = self.viewController; // 追加 } (snip) - (void)beginPreviewPanelControl:(QLPreviewPanel *)panel { self.previewPanel = panel; panel.dataSource = self; panel.delegate = self.viewController; // 追加 } - (void)endPreviewPanelControl:(QLPreviewPanel *)panel { panel.delegate = nil; panel.dataSource = nil; self.previewPanel = nil; // 追加 }
QLPreviewPanelのDelegateをviewControllerとします。
QLPreviewPanelControllerのメソッドはもちろん、ビューが入れ替わるときも再設定が必要です。previewPanel変数はControllerになっていないときはnilになってますのでControllerになっているかどうかを気にせず代入出来ます。
つぎにViewControllerたち。
ControllerListViewController.mの一部
#pragma mark#### QLPreviewPanel Deleate #### - (NSView *)previewTragetView { return [(NSScrollView *)[self view] documentView]; } @end
ControllerIconViewController.mの一部
#pragma mark#### QLPreviewPanel Deleate #### - (NSView *)previewTragetView { return [(NSScrollView *)[self view] documentView]; } @end
どちらも同じです。[self view]がNSScrollViewなのでその中身を返します。
ControllersFlowViewController.mの一部
#pragma mark#### QLPreviewPanel Deleate #### - (NSView *)previewTragetView { return (NSView *)coverFlow; }
そのまま。IKImageFlowViewのオブジェクトを返します。
前回、これらのスーパークラスControllerViewControllerでQLPreviewPanelのDelegateメソッド -previewPanel:handleEvent:を -previewTragetViewが正しくビューを返せば動くように実装しましたので、プレビューパネルが出ている状態で、矢印キーを押す事で選択アイテムを変更出来るようになりました。
これで、ビルドすれば試せる状態になりました。
では次回は第三弾!