NVKCategoryView【実践的Macintoshプログラミング解説】

印刷用表示 |テキストサイズ 小 |中 |大 |

CoreData版 Repeating Motif Generator の開発 Repeating Motif Wonderland CoreData 実践的 Macintosh プログラミング解説

HOME > ソースコード公開 > NVKCategoryView

更新日 2009-05-24

NVKCategoryView

NVKCategoryViewの紹介

NVKCategoryViewSample.png NVKCategoryViewは、複数のビューの表示を切替える事のできるビューです。限られた面積の中で数多くのビューを表示したい場合に使うと便利です。

 右の図がサンプルプログラムのスクリーンショットです。タイトルテキストの左にある三角ボタンをクリックして、そのグループを展開したり折り畳んだりする事ができます。

 ウィンドウが狭い時は最小限のビューを表示すればよく、またウィンドウが広い時は全てのビューを表示できます。したがって狭い画面に合わせた設計にする必要がなくなり、画面を有効に使う事ができます。

ライセンス

 NVKCategoryViewは無保証です。
 NVKCategoryViewはクリエイティブコモンズライセンスのもとで公開します。

Creative Commons License

 原著作者のクレジットとしては以下の文を含めて下されば結構です。

NVKCategoryViewの原著作者:NovemberKou
公開URL:http://www.novemberkou.com/RMWCD/sourceCode/NVKCategoryView.html

ダウンロード

 NVKCategoryViewのソースコードと関連ファイルをダウンロードするには下記のリンクをクリックして下さい。

LinkIconNVKCategoryView Ver.1.0

 NVKCategoryViewを含んだサンプルプログラムのソースコードをダウンロードするには下記のリンクをクリックして下さい。

LinkIconNVKCategoryViewサンプルプログラム

使い方

 NVKCategoryViewを使う手順を説明します。

  1. ソースファイルを自分のプロジェクトにコピーする
  2. 表示するビューを用意する
  3. NVKCategoryViewを配置する
  4. Localizable.stringsを用意する
  5. 表示するビューを登録する

1. ソースファイルを自分のプロジェクトにコピーする

 ダウンロードしたファイルを解凍してできたフォルダの中には五つのファイルが入っています。以下の五つのファイルです。

  • NVKCategoryView.h
  • NVKCategoryView.m
  • NVKCategoryTitleView.h
  • NVKCategoryTitleView.m
  • NVKCategoryBackground.png

 全てのファイルをあなたのプロジェクトにコピーして下さい。FinderからファイルをドラッグしてXcodeのプロジェクトファイルにドロップすればコピーできます。右の図はサンプルプログラムにファイルをコピーした結果です。

copyToYourProject.png

2. 表示するビューを用意する

 表示するビューはあなたが用意する必要があります。そのビューはウィンドウ上に配置しないで、カスタムビューにしておいて下さい。カスタムビューは下の図の様にLibraryパレットからドラッグして、nibウィンドウにドロップすれば作る事ができます。

makeCustomView.png

 ドロップしてできたカスタムビューアイコンをダブルクリックすれば、そのカスタムビューを表すウィンドウが開きます。そこにボタンやテキストフィールド等のコントロールを配置すればOKです。

3. NVKCategoryViewを配置する

specifyClass.png ウィンドウ上にNVKCategoryViewを配置して下さい。カスタムビューをパレットからドラッグしてウィンドウにドロップし、クラスをNVKCategoryViewに指定すればOKです。クラスの指定は、右の図の様にインスペクタのIdentityグループで行ないます。

 スクロールビューの中に入れると正常動作しなくなりますので、入れないで下さい。

4. Localizable.stringsを用意する

 プロジェクトにLocalizable.stringsというファイルを作って入れて下さい。Resourcesグループの中に作るのがいいでしょう。右クリックで現れるコンテキストメニューで「追加」ー「新規ファイル...」を実行します。

newFile.png

 空のファイルを選択します。

newFile2.png

 名前を入力します。

newFile3.png

 このファイルはタイトルテキストを指定するのに使います。

"titleKey" = "タイトルテキスト";

という形式でキーと値のペアをLocalizable.stringsに記述して下さい。ここで記述したキーを後で使います。サンプルプログラムでは以下のような内容にしています。

Localizable.strings(English)

"flipOptionTitle" = "flip option";
"lineJoinStyleTitle" = "line join style";
"windingRuleTitle" = "winding rule";
"scaleOptionTitle" = "scale option";
"opacityTitle" = "opacity";
"strokeAndFillTitle" = "stroke & fill";

Localizable.strings(Japanese)

"flipOptionTitle" = "反転オプション";
"lineJoinStyleTitle" = "線の接続方法";
"windingRuleTitle" = "内側と外側の判定方法";
"scaleOptionTitle" = "倍率オプション";
"opacityTitle" = "不透明度";
"strokeAndFillTitle" = "線と塗りつぶし";

 Localizable.stringsファイルはローカライズ可能にしておきます。ファイルを右クリックして「情報を見る」を実行し、「一般」タブの一番下にある「ファイルをローカライズ可能にする」ボタンをクリックします。そして「ローカリゼーションを追加」ボタンをクリックしてJapaneseを追加します。Englishは不要であれば削除して下さい。

5. 表示するビューを登録する

 最後に初期化コードの中でNVKCategoryViewに表示するビューを登録して終了です。
 登録作業を行うクラスからNVKCategoryViewと表示する各ビューにアクセスできないといけないので、アウトレットを追加して接続しておいて下さい。
 サンプルプログラムのMyDocument.hは以下の様になっています。赤字が追加すべきコードです。

//
//  MyDocument.h
//  NVKCategoryViewSample
//
//  Copyright 2008 Novemberkou. All rights reserved.
//

#import <Cocoa/Cocoa.h>

@class   NVKCategoryView;

@interface MyDocument : NSPersistentDocument
{
    IBOutlet    NVKCategoryView     *categoryView;
    IBOutlet    NSView      *strokeAndFill,*windingRule,*flip,*scale,*opacity,*lineJoinStyle;
}

@end

 まず登録するビュー一つに対して一つの辞書を作成します。この辞書には

  1. タイトルテキストを表すキー
  2. 表示するビュー

の二つの情報を入れておきます。タイトルテキストを表すキーは先ほどLocalizable.stringsに記述したキーの名前を使います。表示するビューは接続したアウトレットを使います。
 これらの情報をそれぞれNVKCategoryTitleKey, NVKCategoryTargetViewKeyというキーで辞書に登録します。具体例は下のコードを見て下さい。

 辞書を作成したらNVKCategoryViewのaddCategorys:メソッドを使ってビューを登録します。複数のビューを一気に登録しますので、辞書の配列を引数にします。

//
//  MyDocument.m
//  NVKCategoryViewSample
//
//  Copyright 2008 Novemberkou. All rights reserved.
//

#import "MyDocument.h"

#import "NVKCategoryView.h"


@implementation MyDocument

- (id)init 
{
    self = [super init];
    if(self != nil)
    {
        // initialization code
    }
    return self;
}

- (NSString *)windowNibName 
{
    return @"MyDocument";
}

- (void)windowControllerDidLoadNib:(NSWindowController *)windowController 
{
    NSDictionary    *item = [NSDictionary dictionaryWithObjectsAndKeys:
                             @"strokeAndFillTitle",NVKCategoryTitleKey,
                             strokeAndFill,NVKCategoryTargetViewKey,
                             nil];
    NSDictionary    *item2 = [NSDictionary dictionaryWithObjectsAndKeys:
                             @"windingRuleTitle",NVKCategoryTitleKey,
                             windingRule,NVKCategoryTargetViewKey,
                             nil];
    NSDictionary    *item3 = [NSDictionary dictionaryWithObjectsAndKeys:
                             @"flipOptionTitle",NVKCategoryTitleKey,
                             flip,NVKCategoryTargetViewKey,
                             nil];
    NSDictionary    *item4 = [NSDictionary dictionaryWithObjectsAndKeys:
                             @"scaleOptionTitle",NVKCategoryTitleKey,
                             scale,NVKCategoryTargetViewKey,
                             nil];
    NSDictionary    *item5 = [NSDictionary dictionaryWithObjectsAndKeys:
                             @"opacityTitle",NVKCategoryTitleKey,
                             opacity,NVKCategoryTargetViewKey,
                             nil];
    NSDictionary    *item6 = [NSDictionary dictionaryWithObjectsAndKeys:
                             @"lineJoinStyleTitle",NVKCategoryTitleKey,
                             lineJoinStyle,NVKCategoryTargetViewKey,
                             nil];

    [super windowControllerDidLoadNib:windowController];
    [categoryView addCategorys:[NSArray arrayWithObjects:item,item2,item3,item4,item5,item6,nil]];
}

@end