使用箭头键可以导航NSTableView的NSTableView周围的可编辑单元格,然后输入/标签?例如,我想让它更像一个电子表格.
这个应用程序的用户预计会编辑很多单元格(但不是全部),而且我认为如果不需要双击每个单元格,这样做会更容易.
解决方法
在Sequel Pro中,我们使用了一个不同的(在我的眼睛更简单)方法:我们实现了控件:textView:doCommandBySelector:在TableView的委托中.这个方法很难找到 – 它可以在NSControlTextEditingDelegate Protocol Reference中找到. (记住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; }