NSTextFieldCell を含む 3 つの列を持つ tableView があります。すべてにバインディングが設定されています。
いずれかの列のセルのテキストは計算され、直接編集することはできません。この列では、セルが編集モードになったときに、 textField の代わりにボタンまたはカスタム ビューを表示したいと考えています。
別の言い方をすれば、編集されていないときはNSTextFieldCellであるNSCellが必要であり、編集されているときはNSButtonCell (またはカスタム ビュー) が必要です。
これに進むためのヒントはありますか?
これが私が試したものですが、成功しませんでした:
- #1を試してください:
NSTextFieldCell
以下に示すように aとオーバーライドをサブクラス化しましたfieldEditorForView:
=> 問題は、返される NSButton が応答しないことsetDelegate:
と、おそらく他の多くのものです。
- (NSTextView *)fieldEditorForView:(NSView *)aControlView {
NSTableView *tableView = (NSTableView *) aControlView;
// Manually computing column and row index for testing purposes
NSButton* button = [[NSButton alloc] initWithFrame:[tableView frameOfCellAtColumn:2 row:2]];
return (NSTextView *)button;
}
- #2を試してください:
サブクラスNSTextFieldCell
とオーバーライドdrawWithFrame: inView:
=> このメソッドは、編集モードでないときにセルを描画するためにのみ使用されます。
- #3を試してください:
この手がかりにはいくらかの可能性がありますが、明らかに何かが欠けています。
ウィンドウのデリゲートに実装windowWillReturnFieldEditor: toObject:
し、カスタム フィールド エディターを返します。私は正しい軌道に乗っているように見えますが、何かを見逃していました。引数 anObject は決して私のカスタム セルではありません (再確認したところ、XIB で適切に定義されています)。
- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)anObject
{
if ([anObject isKindOfClass:[NSCellTextAndButtonAtEditTime class]])
{
NSLog(@"Going there");
NSButton* button = [[NSButton alloc] initWithFrame:CGRectMake(0, 0, 300, 20)];
button.title = @"test";
return button;
}
return nil;
}