objective-c – 带NSTableView的箭头键

使用箭头键可以导航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;
    }

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...