[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)之间是否需要授权?我还有其他需要的代码吗?我需要调用我遗漏的协议吗?