微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/c/111347.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐