尝试在XCode for OSX App

时间:2016-08-23 08:43:08

标签: swift xcode macos

我正在使用XCode 7.3构建一个OSX桌面应用程序,而我正在尝试为其中一个表单设置Tab键顺序。

我发现了一些帖子,解释了XCode 4的类似问题,但没有随处可见,https://www.youtube.com/watch?v=SRrE8eqp0dU

我试图修复的基本问题是,当用户在某个字段和标签中时,我希望它标签到下面的字段,而不是旁边的字段,依此类推。

通过文档查看它提到连接nextKeyView所以它知道旁边的选项卡的位置,所以我使用Interface Builder为每个字段连接nextKeyView指向正确的但没有去。

我想我需要设置initialFirstResponder但不确定在哪里连线?

它并没有真正附加到单独的视图,所以有点丢失。

我已在此处发布了我的源代码https://github.com/johnantoni/osx-tab-order

任何想法和指示真的很受欢迎吗?

输了。

enter image description here

2 个答案:

答案 0 :(得分:2)

我检查了你的项目,非常好,你把它包括在内。它使AppKit更容易玩。我绝不是AppKit的专家,我坦白地说多年来没有触及过它,但我努力使其成功。

您看到的问题看起来是因为(自动)重新计算Key View Loop。我不得不用黑客禁用它,必须有更好的方法,但我找不到一个。

class MyWindow: NSWindow {
    override func recalculateKeyViewLoop() {
        // Remove. nextKeyView and makeFirstResponder seemed broken with this
    }
}

在完成重新计算后,您可以将初始响应者设置为:

override func viewWillAppear() {
    view.window?.makeFirstResponder(aField)
}

如果您已在Interface Builder中正确设置了所有nextKeyViews,则Tabbing现在可用。

也可以通过编程方式完成设置:

override func viewDidLoad() {
    super.viewDidLoad()

    aField.nextKeyView = bField
    bField.nextKeyView = cField
    cField.nextKeyView = dField
    dField.nextKeyView = aField
}

在上面的代码中,标识符aFieldbField等是ViewController中的出口。您可以通过控件从字段拖动到视图控制器并命名它来添加一个。

不是一个完美的解决方案,但我希望这会有所帮助。

答案 1 :(得分:0)

在Xcode 11中,这对我而言不起作用,除非我将nasm boot.asm -f bin -o boot.bin 移至视图控制器生命周期的更深处。我使用了[BITS 16] [ORG 0x7C00] start: mov SI, msg call eachstring jmp $ eachstring: mov AL, [SI] inc SI OR AL, AL je end jne printchar printchar: mov AL, [SI];Parameter festlegen mov AH, 0x0E;Opcode ein Zeichen auszugeben mov BH, 0x00;Keine Seite mov BL, 0x07 int 0x10 ret end: ret msg db 'Hallo Welt', 0 TIMES 510 - ($ - $$) db 0;Füllt den restlichen Speicher dw 0xAA55;Magic key ,但其他入口点也可以使用。

aField.nextKeyView = bField ...