2016-08-23 47 views
0

我正在用XCode 7.3构建OSX桌面应用程序,并试图设置其中一个窗体的制表符顺序。尝试在XCode中为OSX应用程序设置制表顺序

我发现一对夫妇的帖子解释了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

回答

1

我检查你的项目,优秀的,你包括它。它使AppKit变得更容易。我绝不是AppKit的专家,我坦白地说,多年来一直没有触及它,但是我付出了一些努力让它成功。

看起来像你看到的问题是因为(自动)重新计算密钥视图循环。我必须通过黑客来禁用它,必须有更好的方法,但我找不到一个。

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

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

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

现在tab键切换工作,如果你在Interface Builder中正确设置所有nextKeyViews。

的设置还可以通过编程完成为:

override func viewDidLoad() { 
    super.viewDidLoad() 

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

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

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

+0

是的!!!谢谢Seurahepo!出色的工作,不要以为我会找到recalculateKeyViewLoop()没有你的帮助。高手!我把我的更改推向回购,所以如果有人被卡住了,他们可以看看它。辉煌!奇迹般有效! –

相关问题