その他の作業【実践的Macintoshプログラミング解説】

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

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

LinkIconホーム

更新日 2009-05-24

ドラッグ&ドロップでリサージュ図形の並べ替え、複製ができる様にする

その他の作業

 テーブルビューのデータソースとなるオブジェクトができました。このオブジェクトをnibファイル中にインスタンス化して、アウトレットを接続します。

 またテーブルビューや配列コントローラの設定を追加する必要があります。

DragDropDataSourceをインスタンス化する

objectInLibrary.png RMGDocument.nibの中にDragDropDataSourceクラスのオブジェクトをインスタンス化します。

 Xcodeの「グループとファイル」リストにあるRMGDocument.nibをダブルクリックしてInterface Builderを起動して下さい。

 Libraryパレットの中にObjectという青い立方体のアイコンが入っていますので探して下さい。"Objects & Controllers"グループの中の"Controllers"の中に入っています。


dragObject2.png 見つかったらそれをドラッグして、nibウィンドウでドロップします。


idOfDDD.png このオブジェクトがDragDropDataSourceクラスのオブジェクトになる様に設定します。

 インスペクタの"i"アイコンを選択してClass Identityを設定します。先ほどDragDropDataSourceクラスを作成したので、これが選べる様になっている筈です。

 ついでにnibウィンドウ上で表示される名前をDataSourceにしておきます。これはInterface Builder IdentityのNameを設定すればOKです。


dataSourceInNibWindow.png すると、こうなります。


acOutlet.png DataSourceアイコンをクリックして選択し、アウトレットを接続します。

 arrayController行の右端にある丸をクリックしてドラッグすると線がのびてくるので、Lissajousアイコン上でマウスボタンを放すと接続されます。

テーブルビューのdataSourceアウトレットを接続する

 次にテーブルビューのdataSourceアウトレットを接続します。

 dataSource行の右端にある丸をクリックしてドラッグすると線がのびてくるので、DataSourceアイコン上でマウスボタンを放すと接続されます。

tableViewDataSource.png

配列コントローラにソートディスクリプタを設定する

 ドラッグ&ドロップで書き換えられるのは、順番を表すorder属性の値です。よってテーブルビューはorderの値で並べ替えて表示される様にしておく必要があります。

 そのために配列コントローラにソートディスクリプタをセットします。

//
//  LissajousTableView.m
//

- (void)awakeFromNib
{
    NSSortDescriptor    *orderSort;

    orderSort = [[NSSortDescriptor alloc] initWithKey:@"order" ascending:YES];
    [arrayController setSortDescriptors:[NSArray arrayWithObject:orderSort]];
    [orderSort release];
}

ドラッグを受け入れるデータタイプを登録する

 テーブルビューがドラッグされたデータとして、どのようなデータタイプのものを受け入れるのかを宣言します。これをやっておかないと、テーブルビューがドラッグされたデータに対して反応しません。

 registerForDraggedTypes:メソッドでデータタイプを登録します。複数のデータタイプを登録できる様に配列を渡す様になっています。

 リサージュ図形を受け入れる様にするので、[Lissajous dataType]を登録します。

//
//  LissajousTableView.m
//

- (void)awakeFromNib
{
    NSSortDescriptor    *orderSort;

    orderSort = [[NSSortDescriptor alloc] initWithKey:@"order" ascending:YES];
    [arrayController setSortDescriptors:[NSArray arrayWithObject:orderSort]];
    [orderSort release];

    [self registerForDraggedTypes:[NSArray arrayWithObject:[Lissajous dataType]]];
}