OSX, да.
При даблклике меняется значение @property editingRow, перезагружается таблица, подменяется вьюха и начинается редактирование. Приходится использовать и делегирование, и cocoa bindings одновременно. Лучше способа пока не нашёл.
Текущее решение работает, но только если у тебя один textField в ячейке. Остальные редактировать не получается, при любом клике режим редактирования выключается.
Мне нужно не править текущее решение, а понять как это в принципе должно делаться.
В эпловых доках нашёл
два абзаца на эту тему:Views or controls in a table sometimes need to respond to incoming events. To determine whether a particular subview should receive the current mouse event, a table view calls validateProposedFirstResponder:forEvent: in its implementation of hitTest. If you create a table view subclass, you can override validateProposedFirstResponder:forEvent: to specify which views can become the first responder. In this way, you receive mouse events.- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
// getting tableview's arraycontroller
NSArrayController *arrayController = [[tableView infoForBinding:NSContentBinding] valueForKey:NSObservedObjectKey];
// checking if task was done and assigning custom cellview
NSNumber *done = [arrayController.arrangedObjects[row] valueForKey:@"done"];
if ([done boolValue]) {
return [tableView makeViewWithIdentifier:@"done" owner:self];
} else if (self.editingRow == row) {
return [tableView makeViewWithIdentifier:@"editing" owner:self];
} else {
return [tableView makeViewWithIdentifier:@"regular" owner:self];
}
}
- (void)doubleClick:(id)sender
{
NSInteger clickedRow = [sender clickedRow];
if (clickedRow != -1) {
self.editingRow = clickedRow;
[self.somedayTableView reloadData];
[sender editColumn:0 row:[sender clickedRow] withEvent:nil select:YES];
}
}