尝试在 Xcode 中为 OS X 应用程序设置 Tab 键顺序

Joh*_*ths 2 macos xcode swift

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

我发现有几篇文章解释了 Xcode 4 的类似问题,但没有任何进展,https://www.youtube.com/watch ?v=SRrE8eqp0dU

我试图解决的基本问题是,当用户位于字段和选项卡中时,我希望它切换到下面的字段,而不是旁边的字段,等等。

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

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

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

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

有什么想法和指示真的很受欢迎吗?

处于失败的结局。

在此输入图像描述

小智 5

我检查了您的项目,非常好,您将其包含在内。它让 AppKit 的使用变得更加容易。我绝不是 AppKit 方面的专家,坦率地说,我已经很多年没有接触过它了,但经过一些努力,我设法让它发挥作用。

看起来您看到的问题是由于(自动)重新计算键视图循环造成的。我不得不用 hack 来禁用它,一定有更好的方法,但我找不到。

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

摆脱重新计算后,您可以将初始响应者设置为:

override func viewWillAppear() {
    view.window?.makeFirstResponder(aField)
}
Run Code Online (Sandbox Code Playgroud)

如果您在 Interface Builder 中正确设置了所有 nextKeyViews,现在可以使用 Tab 键切换。

也可以通过编程方式完成设置,如下所示:

override func viewDidLoad() {
    super.viewDidLoad()

    aField.nextKeyView = bField
    bField.nextKeyView = cField
    cField.nextKeyView = dField
    dField.nextKeyView = aField
}
Run Code Online (Sandbox Code Playgroud)

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

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