当前位置:  开发笔记 > 编程语言 > 正文

带有NSTableView的箭头键

如何解决《带有NSTableView的箭头键》经验,为你挑选了1个好方法。

是否可以使用箭头键并输入/ tab在NSTableView周围导航NSTableView的可编辑单元格?例如,我想让它感觉更像电子表格.

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



1> Jakob Egger..:

在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;
    }

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有