如何在Cocoa应用程序中设置自定义标签顺序

时间:2019-03-17 05:30:53

标签: swift cocoa xcode10.1

[MacOS Mojave 10.14.1,Xcode 10.1,Swift 4.2,可可应用]

这是我的第一个Cocoa项目,过去曾进行过少量的iOS开发。我已经花了两天时间尝试这个,但是没有用。考虑到在带Windows的Visual Studio中它多么简单和有效,我不敢相信要在MacOS上运行它有多么困难。

因此,我创建了一个简单的Cocoa App项目,并且Main.storyboard随附:
1)NSApplication(菜单),
2)位于NSWindow上方的NSWindowController,
3)一个NSWindow,中间显示“ View Controller”,
4)一个NSViewController,
5)一个NSView(我将所有可可对象都放在了其中)。
(开箱即用)

我在NSTextField内组织了一堆NSView,我以菊花链方式将他们的nextKeyView出口链接到了我需要的(循环)订单中。我在NSView中还有其他控件,但是由于我不希望将它们制表,因此我将其Refuses First Responder属性设置为ticked或将其Behaviour设置为{ {1}}。我还尝试以编程方式解决此问题,并在默认的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

但是遗憾的是这没有效果。我不明白为什么NSView(或NSViewController)没有recalculateKeyViewLoop()方法,因为它是我添加的所有控件的容器。是的,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?
但是提供的建议和解决方案似乎都不适合我。

有人可以帮我吗?

我需要为let appWindow = self.view.window appWindow?.recalculateKeyViewLoop() NSWindowController创建一个子类吗?我把东西放在错误的容器中了吗?我是否需要在NSViewController / NSView(ViewController.swift)之间进行委派?我是否还有其他需要的代码?我需要调用一些我遗漏的协议吗?

0 个答案:

没有答案