【问题标题】:Setting tab order for NSTextFields of an NSView为 NSView 的 NSTextFields 设置 Tab 键顺序
【发布时间】:2012-04-23 16:48:19
【问题描述】:

我正在尝试在给定的 NSView 上设置 NSTextFields 的 Tab 键顺序。据我了解,我必须通过将 nextKeyView 插座设置为下一个 NSTextField 来将 NSTextFields 与 InterfaceBuilder 连接起来。我这样做了 - 没有效果。当我按下制表符时,在其中一个 NSTextFields 中它只是失去焦点,就是这样。无论我多久按一次制表符,其他 NSTextField 都没有重新获得焦点。

我还读到我需要设置窗口的 initialFirstResponder。在这种特殊情况下,我认为我不能这样做,因为我的 AppDelegate 调用了一个 NSView,它又充当了一个带有许多不同按钮的菜单区域,每个按钮调用不同的 NSView,这些 NSView 作为不同视图的子视图加载.因此 AppDelegate 无法知道当前加载了哪个 NSView。

有没有办法基于 NSView 设置 NSTextFields 的 tab-order?

谢谢

【问题讨论】:

    标签: objective-c cocoa nsview nstextfield first-responder


    【解决方案1】:

    您必须禁用窗口中键循环的自动重新计算。见-[NSWindow setAutorecalculatesKeyViewLoop:]

    编辑添加:这也可以在 Interface Builder 中设置。

    【讨论】:

    • 没用。我添加了 [_window setAutorecalculatesKeyViewLoop:NO];到 applicationDidFinishLaunching 方法。在 Interface Builder 中,我首先没有勾选“Auto Recalculates View Loop”复选框。
    • 您是想自定义跳格顺序,还是只想让跳格工作而不是?如果是后者,您是否尝试过启用键视图循环的自动重新计算?
    • 我尝试激活自动重新计算视图循环选项,但没有效果。基本上我希望标签能够正常工作......目前,如果我“从” NSTextField 中选择标签,它就会失去焦点,没有其他事情发生......没有其他东西得到关注 - 无论我多久按一次标签......
    【解决方案2】:

    这可能对您的情况有所帮助,也可能无济于事,但是在处理另一个 NSView 中的 NSView 时,以下内容对我有用。我有两个垂直的 NSTextField 堆栈。而不是水平遍历,我需要先按下一个堆栈然后再下一个......所以我将两个垂直堆栈中的每一个嵌入到它们自己的盒子中(在 IB 中,首先选择你的项目,编辑器>嵌入>盒子)。完美运行。 如果您不想要盒子的外观,您可以清除其标题并将其边框类型设置为 none: invisible box。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多