Tag: NSTableView

目次

関連ページ

参考情報

基本

超基本的な実装方法

概要

  • プログラムからゴリゴリつくるのではなく、Interface Builderを使う方法が基本?

Interface Builderを主に使って作成する方法

  • 1列目にテキストを、2列目に画像を表示するサンプルを考える。
  • モデルクラスの配列はAppDelegateのサブクラスなどが保持する。
  • そのモデルクラスの配列をArray Controllerにバインディング。
  • ビューベースのテーブルビューで、各セルのValueにモデルクラスのプロパティをバインディングする。

モデルの作成

  • 例えば以下のようなモデルを考える
    @interface Item : NSObject
    
    @property(nonatomic, copy) NSString *title;
    @property(nonatomic, strong) NSImage *icon;
    
    @end
    

AppDelegateのサブクラス(DemoAppDelegate)に保持

  • initでダミーデータを追加しておく
    - (id)init
    {
        self = [super init];
        if (self) {
            self.items = [[NSMutableArray alloc] init];
            Item *item1 = [[Item alloc] init];
            item1.title = @"abc";
            item1.icon = [NSImage imageNamed:@"add.png"];
            Item *item2 = [[Item alloc] init];
            item2.title = @"def";
            item2.icon = [NSImage imageNamed:@"add2.png"];
            [_items addObject:item1];
            [_items addObject:item2];
        }
        return self;
    }
    

xibファイルの準備

  • Array Controllerを設置。itemsをバインディングする。
    • Attributes InspectorでObject ControllerのModelをClassに。Class NameをItemに。
    • Binding InspectorでBind to Demo App Delegateに。Model Key Pathをitemsに。
  • Table Viewを設置。
    • Attributes InspectorでView Basedに変更。
    • Binding InspectorでTable Contentで、Bind to Array Controllerに設定。controller KeyはarrangedObjects。
  • 1つめの列。Table Column > Table Cell View > Text Fieldにして、Text Fieldにバインドする。
    • Binding Inspectorで、Bind to Table Cell Viewに。Model Key PathにobjectValue.titleに。編集したい場合、Allows Editing Multiple Values Selectionにチェック。
  • 2つめの列。Table Column > Table Cell View > Image Viewにして、Image Viewにバインドする。
    • Binding Inspectorで、Bind To Table Cell Viewに。Model Key PathにobjectValue.iconをバインドする。DataではなくValueをバインドすること。

古い内容

データソースクラスの生成

  • UIKitの場合、UITableViewControllerを使うのが定番だけど、AppKitにはNSTableViewControllerがない(NSViewControllerはあるみたいだけど)。NSObjectを直接継承し、NSTableViewDataSourceを実装するのが定番っぽい。
  • 例: TableController.h
    @interface TableController : NSObject <NSTableViewDataSource, NSTableViewDelegate>
  • TableController.mに必要なメソッドは最低限以下の二つ
    - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
    
    - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowInde
    

Interface Builder上で接続

  • Interface Builderで、Table Viewを設置。
  • NSObjectを設置して、TableControllerクラスとする。
  • Table Viewのデータソースを上のTableControllerに設定(IB上で)。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-04-13 (水) 16:46:20