gpt4 book ai didi

objective-c - NSTableView 的方向键

转载 作者:太空狗 更新时间:2023-10-30 03:26:09 25 4
gpt4 key购买 nike

是否可以使用箭头键和 enter/tab 在 NSTableView 周围导航 NSTableView 的可编辑单元格?例如,我想让它看起来更像电子表格。

此应用程序的用户需要编辑相当多的单元格(但不是全部),我认为如果他们不必双击每个单元格,这样做会更容易。

最佳答案

在 Sequel Pro 中,我们使用了一种不同的(在我看来更简单的)方法:我们在 TableView 的委托(delegate)中实现了 control:textView:doCommandBySelector:。这个方法很难找到——可以在 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;
}

关于objective-c - NSTableView 的方向键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/612805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com