NSSplitViewController
-subclass viewDidLoad
-method で、データ ソースをプログラムで設定します。子View Controllerクラスも実装する必要があります(tableView
アウトレットがコントロールに接続されています)。
MySplitViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
for (NSSplitViewItem *item in self.splitViewItems)
{
NSViewController *controller = item.viewController;
if ([controller isKindOfClass:[MyChildController class]])
{
MyChildController *myController = (MyChildController *)controller;
myController.tableView.dataSource = self;
[myController.tableView reloadData];
}
}
}
しかし、実を言うと、私はこのアプローチが好きではありません。テーブル ビューのデータ ソース メソッドがネイティブ ビュー コントローラー クラスにある場合は、さらに優れています。
それを行う別の方法。MyChildController.h ファイル:
@class MyChildViewController;
@protocol MyChildControllerDelegate <NSObject>
- (void)childController:(MyChildViewController *)controller didSelectRowAtIndex:(NSUInteger)index;
@end
@interface MyChildViewController : NSViewController <NSTableViewDataSource, NSTableViewDelegate>
@property (nonatomic, weak) id<MyChildControllerDelegate> delegate;
@property (nonatomic, retain) NSArray *items;
@property (nonatomic, weak) IBOutlet NSTableView *tableView;
@end
dataSource
必要なすべてのテーブル ビューとdelegate
メソッドを実装することを忘れないでください。MySplitViewController.m ファイル:
- (void)viewDidLoad
{
[super viewDidLoad];
for (NSSplitViewItem *item in self.splitViewItems)
{
NSViewController *controller = item.viewController;
if ([controller isKindOfClass:[MyChildController class]])
{
MyChildController *myController = (MyChildController *)controller;
myController.delegate = self;
[myController setItems:_items];
}
}
}