Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NSTableView和swift:当按下箭头并选择最后一行时,如何选择第一行?_Swift_Macos_Cocoa_Nstableview - Fatal编程技术网

NSTableView和swift:当按下箭头并选择最后一行时,如何选择第一行?

NSTableView和swift:当按下箭头并选择最后一行时,如何选择第一行?,swift,macos,cocoa,nstableview,Swift,Macos,Cocoa,Nstableview,我有一个很短的问题,无法通过搜索找到答案 我的程序是用swift和cocoa编写的简单mac程序。我使用NSTableView类,希望使用箭头键在行中上下导航。这直接起作用。但现在我希望,当最后一行被选中时,我按下向下键,第一行被选中。就像周期性的边界条件;) 你能帮我解决这个问题吗?或者告诉我应该读些什么来处理这样的问题 非常感谢:)您可以覆盖按键NSTableView。完成新选择后,不要忘记滚动 斯威夫特: import Carbon.HIToolbox.Events class Tabl

我有一个很短的问题,无法通过搜索找到答案

我的程序是用swift和cocoa编写的简单mac程序。我使用NSTableView类,希望使用箭头键在行中上下导航。这直接起作用。但现在我希望,当最后一行被选中时,我按下向下键,第一行被选中。就像周期性的边界条件;)

你能帮我解决这个问题吗?或者告诉我应该读些什么来处理这样的问题


非常感谢:)

您可以覆盖按键NSTableView。完成新选择后,不要忘记滚动

斯威夫特:

import Carbon.HIToolbox.Events

class TableView : NSTableView {

    override func keyDown(with event: NSEvent) {

        if event.characters?.count == 1 {
            let character = event.keyCode
            switch (character) {
            case UInt16(kVK_UpArrow):
                if selectedRow == 0 {
                    selectRowIndexes([numberOfRows - 1], byExtendingSelection: false)
                    scrollRowToVisible(numberOfRows - 1)
                    //scrollToEndOfDocument(nil)
                } else {
                    super.keyDown(with: event)
                }
                break
            case UInt16(kVK_DownArrow):
                if selectedRow == numberOfRows - 1 {
                    selectRowIndexes([0], byExtendingSelection: false)
                    scrollRowToVisible(0)
                    //scrollToBeginningOfDocument(nil)
                } else {
                    super.keyDown(with: event)
                }
            default:
                super.keyDown(with: event)
                break
            }
        } else {
            super.keyDown(with: event)
        }
    }
}
目标-C

#import <Carbon/Carbon.h>
@implementation TableView

- (void)keyDown:(NSEvent *)event
{
    if ([[event characters] length] == 1) {
        unichar code = [event keyCode];
        switch (code)
        {
            case kVK_UpArrow:
            {
                if ([self selectedRow] == 0) {
                    [self selectRowIndexes:[NSIndexSet indexSetWithIndex:[self numberOfRows] - 1] byExtendingSelection:NO];
                    //[self scrollToEndOfDocument:nil];
                    [self scrollRowToVisible:[self numberOfRows] - 1];
                } else {
                    [super keyDown:event];
                }
                break;
            }
            case kVK_DownArrow:
            {
                if ([self selectedRow] == [self numberOfRows] - 1) {
                    [self selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];
                    //[self scrollToBeginningOfDocument:nil];
                    [self scrollRowToVisible:0];
                } else {
                    [super keyDown:event];
                }
                break;
            }
            default:
                [super keyDown:event]
                break;
        }
    } else {
        [super keyDown:event];
    }
}

@end
#导入
@实现表视图
-(void)keyDown:(NSEvent*)事件
{
如果([[事件字符]长度]==1){
unichar代码=[event keyCode];
开关(代码)
{
案例kVK_向上箭头:
{
如果([self selectedRow]==0){
[self-selectRowIndexes:[NSIndexSet indexSetWithIndex:[self-numberOfRows]-1]通过扩展选择:否];
//[自动滚动到内部文档:无];
[self scrollRowToVisible:[self numberOfRows]-1];
}否则{
[超级按键:事件];
}
打破
}
案例kVK_向下箭头:
{
如果([self selectedRow]==[self numberOfRows]-1){
[self-selectRowIndexes:[NSIndexSet IndexBethIndex:0]通过扩展选择:否];
//[自动滚动开始文档:无];
[self-scrollRowToVisible:0];
}否则{
[超级按键:事件];
}
打破
}
违约:
[超级按键关闭:事件]
打破
}
}否则{
[超级按键:事件];
}
}
@结束

非常感谢!这真的很有帮助:)只需2句话:1)向上箭头2)选择最后一行还需要一个super.keyDown(),需要有SelectRowAtIndex([numberOfRows-1]),否则这是完美的,可以直接工作!非常感谢:)谢谢,我错过了。更新帖子。