swift - 尝试在 Xcode 中为 OS X App 设置选项卡顺序

标签 swift xcode macos

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

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

我要解决的基本问题是,当用户在一个字段和选项卡中时,我希望它跳转到下面的字段,而不是它旁边的字段,等等。

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

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

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

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

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

两败俱伤。

enter image description here

最佳答案

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

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

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

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

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

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

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

override func viewDidLoad() {
    super.viewDidLoad()

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

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

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

关于swift - 尝试在 Xcode 中为 OS X App 设置选项卡顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39096382/

相关文章:

ios - 从核心数据 swift 4 中获取关系

swift - Sprite 节点定相

xcode - 是否存在用于在Xcode中循环显示实用标记或方法的键盘快捷键?

python - 在 matplotlib 中,为什么用细线绘图会更快?

iOS 11 安全区域布局指南向后兼容

ios - 如何将数据保存到模型coredata

postgresql - 只能将pgadmin连接到端口5432上的postgres docker容器,但不能连接任何其他端口?

macos - mac 中 Visual Studio Code ("not"Visual Studio 中的符号 TreeView

ios - 对两个不同类型的 promise 使用相同的 then/catch/finally block

xcode - 在 Xcode 4 版本控制中,当您刚刚添加到项目中的文件附近有一个问号时,这意味着什么?