これと同様の質問 (まったく同じではない) を持ついくつかのスレッドを見てきましたが、そこにある解決策は私の問題を解決しませんでした。各TableCellViewにいくつかのクリック可能な要素(TextField、DatePicker、およびButton)を持つNSTableViewを作成しました。最初に行を選択せずに、これらのそれぞれをクリックできるようにする必要があります。これを達成しましたただし、setSelectionHighlightStyle: NSTableViewSelectionHighlightStyleNone
各行に関連付けられたモデル オブジェクトに編集内容を渡す必要があるため、編集中の行のインデックスを知る必要があります。私が言及した他のスレッドのいくつかの提案である以下を書いてみましたが、何もしませんでした.
- (BOOL)tableView:(NSTableView *)tableView shouldTrackCell:(NSCell *)cell forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
return YES;
}
それがこれに使用する方法が間違っているのか、それとも単に間違って実装しているだけなのか、100% 確信が持てません。これについてどうやって行くことができるかについてのヒントは素晴らしいでしょう。
編集:
これが、Steve Waddicor の提案を実装するための私の試みです。
ViewController を NSTableViewDataSource にし、TableCellView をオブジェクトのデリゲートとして設定します (コードは MyViewController.m にあります)。
- (void)awakeFromNib{
[self.tableView setDataSource:self];
}
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
CustomTableCellView *view = [self.tableView makeViewWithIdentifier:@"MyIdentifier" owner:self];
[view.textField setDelegate:view];
[view.datePicker setDelegate:view];
return view;
}
//-----------------------
//-----------------------
//----------------------- NSTableViewDataSource Protocol Requirements:
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
{
return [self.tableView numberOfRows];
}
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
return [self.tableView rowViewAtRow:rowIndex makeIfNecessary:NO];
}
CustomTableCellView では、これは TextField をクリックしても呼び出されないデリゲート メソッドであり、デリゲートがオブジェクトに対して正しく設定されていないと思われます。
- (void)mouseDown:(NSEvent*) theEvent{
NSLog(@"TEST");
}