文法ラウンドやメソッド暗記モードを経て、cocoa でアプリっぽいものを作成する機会が多くなったが、全然知られていない方法を一つ。
みんな大好き NSView だが、子供の view を作成して親 view に addsubview したいというときがしばしばある。
しかし、具体的な方法論がほとんど知られていない(笑)。
ワイは試行錯誤(といってもさほど時間はかからなかったが)の結果、以下のようにしている。
Xcode の + で UI パーツのライブラリを呼び出すダイアログを呼び出して、custom view をチョイス。
ここがキモだと思うのだが、これを親ビューが所属する Controller Scene に置く。
すると上図のように Xcode 上でもしっかりと操作可能な形で配置される。
iOS 関係はわからんが、MacOS でこんな図は見たことがない。
追加した view を ChildView、元々あった view を ParentView とすると、ViewController の viewdidload あたりに
_childview = [[ChildView alloc] initWithFrame:_parentview.frame];
[_parentview addSubview:_childview];
としておくと、しっかりこのビューが生成される。
かなり便利な方法だと思うんだが、全然知られてないよね。
NSView の再描画
ところで MacOS の描画関係は Metal から入ったワイは、NSView は自動で再描画してくれるものだと思い込んでいたが、違うらしい。setNeedsDisplay メソッドで明示する。