頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


NSTableViewでセルの編集をしたい時にハマったこと

macOSのNSTableViewを使う時、最近はdelegateとかdataSourceとか使わずにバインディングを使ってる。その方が楽だからだ。

macOSでバインドを使いテーブルを表示する
↑基本はこんな感じ。

今回、このようなNSArrayControllerを使って表示しているテーブル内のセルの値を直接編集しようとしてハマったところをメモ。

NSTextFieldの設定

1. セル(NSTextField)のBehavior(上の図)をEditableにする。

2. セルの入力(編集)完了を拾いたい場合にはAction(上の図)をSent On End Editingとしておき、
Sent Actionsで自分で設定したメソッドに接続しておく(下の図)。
Sent Actionsの設定
かつ、tableViewのdelegateを接続しておく(なぜかセルのNSTextFieldのdelegateではない!)。

3. xibファイルにNSTableViewを設置したらtableのセル(のNSTextField)にはデフォではNumberFormatterは設定されてない。
NumberFormatterを後から設定する場合、
Number Formatterの追加方法
↑この部分をドラッグしてセルにドロップすればいけた。

4. セルのバインディングの設定で参照する変数の型がStringならいいけどIntやFloatだと
Property cannot be marked @objc because its type cannot be represented in Objective-C
となってしまう。なのでNSNumber型にした。
厳密には当方の都合によりNSNumber?型にしてる

5. 上記のNSNumber?で値がまだnilの場合にはplaceholderを表示させたい。
placeholderの指定場所
↑この場合、NSTextFieldのではなく(なんでや?!)、セルのバインディングの設定ペインの”Null Placeholder”に記述するといけた。

NSTableView表示結果
↑placeholder表示した様子。


NSTableViewはいつもながら苦労するけど、SwiftUIになったらこんなの一撃なんかなあと妄想。



macOS 10.15.6 Catalina
Xcode 11.7
Swift 5.2.4
スポンサーサイト




<< NSSecureCodingでオプショナル型の保存、読み込み方法  TopPage  NSSegmentedControlで選択時の画像を白くする >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1358-c8a24711




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.