macOSでテーブル処理をViewController以外に記述したい
iOSアプリ開発の調子でmacOSアプリに取り組んで泣きを見てる。UIをNSに変えればいいんだろうと思ってた過去の自分に説教したい。
今回はテーブルを表示しようとしたんだが、基本的なことはまあ何とかなった。
macOS NSTableView Tutorial
↑またこちらのサイトにお世話になった。ありがたいことです。
ただstoryboard上にNSTableViewを乗っけた場合、そこからのdelegateやdataSource、クリックを拾うactionはViewControllerにしか繋げられなくて困った。
関連の処理はViewControllerクラスじゃなくて別なHogeManagerクラスに記述したいんだあ、、、なんて時ってあるよね?惰性でやるとViewControllerはどんどん巨大化していくのよ。

↑ちなみにHogeMangerはViewControllerクラス内から参照できる。
こういう場合、どうすればいいんだろう???
コードでdelegateとdataSourceをセットした。ああ、原始的。なんかstoryboard使うやり方ありそうな気がするんだけどなあ?
なおdelegateの設定のところで
Assigning to 'id<NSTableViewDelegate> _Nullable' from incompatible type ‘HogeManager *__strong'
というワーニングが出てたので上のようにキャストしたら消えた。
テーブルを使う時はたいていセルを選択した時の処理を記述したいよね。
storyboardからViewControllerにactionをつないでもいいけどそうするとViewController内で受けたIBActionをHogeManagerに「あいよ!」って渡す処理が必要になる。そりゃ短いけどなんか嫌じゃない?
結局セルのクリックはdelegateでも検出できるらしいのでそっちで拾うことにした。
ただiOSの
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
と言ったわかりやすいのはないようで、、、
NSTableViewで行選択をしたときに呼ばれるデリゲートメソッド: 永遠ログ
↑こちらを参考にさせて頂きました。感謝!
今回はテーブルを表示しようとしたんだが、基本的なことはまあ何とかなった。
macOS NSTableView Tutorial
↑またこちらのサイトにお世話になった。ありがたいことです。
ただstoryboard上にNSTableViewを乗っけた場合、そこからのdelegateやdataSource、クリックを拾うactionはViewControllerにしか繋げられなくて困った。
関連の処理はViewControllerクラスじゃなくて別なHogeManagerクラスに記述したいんだあ、、、なんて時ってあるよね?惰性でやるとViewControllerはどんどん巨大化していくのよ。

↑ちなみにHogeMangerはViewControllerクラス内から参照できる。
こういう場合、どうすればいいんだろう???
{ //ViewConteroller.h IBOutlet NSTableView *myTableView; } { //ViewConteroller.m hogeManager = [HogeManager new]; myTableView.delegate = (id<NSTableViewDelegate>)hogeManager; myTableView.dataSource = hogeManager; }↑storyboardの扱いが未熟な俺は仕方なくNSTableViewオブジェクトの参照をViewControllerクラスに接続。
コードでdelegateとdataSourceをセットした。ああ、原始的。なんかstoryboard使うやり方ありそうな気がするんだけどなあ?
なおdelegateの設定のところで
Assigning to 'id<NSTableViewDelegate> _Nullable' from incompatible type ‘HogeManager *__strong'
というワーニングが出てたので上のようにキャストしたら消えた。
テーブルを使う時はたいていセルを選択した時の処理を記述したいよね。
storyboardからViewControllerにactionをつないでもいいけどそうするとViewController内で受けたIBActionをHogeManagerに「あいよ!」って渡す処理が必要になる。そりゃ短いけどなんか嫌じゃない?
結局セルのクリックはdelegateでも検出できるらしいのでそっちで拾うことにした。
ただiOSの
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
と言ったわかりやすいのはないようで、、、
NSTableViewで行選択をしたときに呼ばれるデリゲートメソッド: 永遠ログ
↑こちらを参考にさせて頂きました。感謝!
スポンサーサイト