代码之家  ›  专栏  ›  技术社区  ›  gone

如何在Cocoa应用程序中设置自定义选项卡顺序

  •  0
  • gone  · 技术社区  · 7 年前

    [MacOS Mojave 10.14.1、Xcode 10.1、Swift 4.2、Cocoa应用程序]

    这是我的第一个Cocoa项目,在过去做了少量的iOS开发。我花了两天时间来尝试这个和那个,但都没有用。我不敢相信在MacOS上实现这一点有多困难,考虑到在Windows的Visual Studio中它是多么简单和有效。

    所以,我创建了一个直接的Cocoa应用程序项目和主应用程序。故事板附带:
    1) 非应用程序(菜单),
    2) 位于NSWindow上方的NSWindowController,
    3)在中间显示“视图控制器”的NSWDIOW,
    4) NSVIEW控制器,以及
    5) NSView(我在其中放置了所有Cocoa对象)。
    (标准开箱即用)

    我有一大堆 NSTextField 它是在公司内部组织的 NSView 我把他们的 nextKeyView 我需要的(循环)订单。我在NSView中有其他控件,但由于我不想让它们被选项卡化,我已经设置了它们的 Refuses First Responder 财产 ticked 或者有他们的 Behaviour 开始 None .我还试图通过编程方式修复此问题,并将其设置为默认值 ViewController.swift 文件(我所有代码所在的位置)循环,循环遍历我的文本字段并设置文本字段的一些属性。

    override func viewWillAppear() {
      for i in myTextFields {
        i.value.isEditable = true
        i.value.isEnabled = true
        i.value.alignment = NSTextAlignment.center
        //      i.value.refusesFirstResponder = true
        if i.key == FunctionsEnum.LSP {
          i.value.becomeFirstResponder()
        }
      }
    }
    

    (在哪里 myTextFields 这是一个字典映射 FunctionsEnums 向右 NSTextField .)

    我还尝试使用以下方法重新计算订单:

    let appWindow = self.view.window
    appWindow?.recalculateKeyViewLoop()
    

    但可悲的是,这没有效果。我不明白为什么NSView(或NSViewController)没有RecreacteKeyViewLoop()方法,因为它是我添加的所有控件的容器。是的,NSWindow可能需要在多个视图上重新计算,但如果NSView是唯一的视图,它可以自己进行本地计算。

    我已经阅读了关于这个主题的其他问题/答案:
    Setting a custom tab order in a Cocoa application
    https://www.stevestreeting.com/2014/02/11/auto-layout-and-tab-ordering/
    Tab Order in interface builder?
    但这些建议和解决方案似乎都不适合我。

    谁能帮我一下吗?

    我需要为 NSWindowController NSWindow ? 我把东西放错容器了吗?NSViewController/NSView(ViewController.swift)之间是否需要授权?我还有其他需要的代码吗?我需要调用我遗漏的协议吗?

    0 回复  |  直到 7 年前
    推荐文章