对于 iOS 和 Objective C 似乎有几十个线程,但只有一个用于 macOS 和 swift 没有回答:Access an IBOutlet from another class in Swift
在 NSTabView 中,我在另一个选项卡 (Tab3) [.当我按“保存”时,它会从所有选项卡收集信息,包括访问 popup1 的 indexOfSelectedItem 属性。
我的方法:
创建一个 Tab3 的实例,例如let tab = Tab3()
通过tab.popup1!.indexOfSelectedItem
执行过程中出错:致命错误: 在解包可选值时意外发现 nil 是的,在执行此命令时,Tab3 的 ViewController 确实已经加载。
我相信这是因为 ViewController 的实例无权访问 IBOutlets。那么,问题仍然存在,我如何访问 IBOutlet 的属性?
答案 0 :(得分:2)
如何从其他视图控制器访问 IBOutlets:不要。
这违反了封装原则。您应该将另一个视图控制器的视图视为私有视图。
我建议添加一个函数或计算属性“currentlySelectedItem”。从另一个视图控制器,您可以查询。请注意,如果插座尚未加载或用户尚未选择项目,它应返回 Optional。
(你的代码崩溃是因为这个位:let tab = Tab3()
创建您的 Tab3
视图控制器的新实例。它的视图尚未加载。
你也需要解决这个问题。 (您需要找到一种方法来获取指向屏幕上其他视图控制器的指针,而不是创建一个新实例。)如何做到这一点取决于您如何管理应用中的视图控制器。