是否可以使用箭头键并输入/ tab在NSTableView周围导航NSTableView的可编辑单元格?例如,我想让它感觉更像电子表格.
该应用程序的用户需要编辑相当多的单元格(但不是全部),我认为如果他们不必双击每个单元格,那么这样做会更容易.
在Sequel Pro中,我们使用了一种不同的(在我看来更简单)方法:我们control:textView:doCommandBySelector:
在TableView的委托中实现.很难找到这种方法 - 可以在NSControlTextEditingDelegate协议参考中找到它.(请记住,NSTableView是NSControl的子类)
简而言之,这就是我们想出的结果(我们没有覆盖左/右箭头键,因为它们用于在单元格内导航.我们使用Tab左/右)
请注意,这只是Sequel Pro源代码的一个片段,并不能正常工作
- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)command { NSUInteger row, column; row = [tableView editedRow]; column = [tableView editedColumn]; // Trap down arrow key if ( [textView methodForSelector:command] == [textView methodForSelector:@selector(moveDown:)] ) { NSUInteger newRow = row+1; if (newRow>=numRows) return TRUE; //check if we're already at the end of the list if (column>= numColumns) return TRUE; //the column count could change [tableContentView selectRowIndexes:[NSIndexSet indexSetWithIndex:newRow] byExtendingSelection:NO]; [tableContentView editColumn:column row:newRow withEvent:nil select:YES]; return TRUE; } // Trap up arrow key else if ( [textView methodForSelector:command] == [textView methodForSelector:@selector(moveUp:)] ) { if (row==0) return TRUE; //already at the beginning of the list NSUInteger newRow = row-1; if (newRow>=numRows) return TRUE; if (column>= numColumns) return TRUE; [tableContentView selectRowIndexes:[NSIndexSet indexSetWithIndex:newRow] byExtendingSelection:NO]; [tableContentView editColumn:column row:newRow withEvent:nil select:YES]; return TRUE; }