从其他视图控制器 (macOS) 访问 IBOutlets

时间:2021-05-27 18:34:35

标签: swift xcode macos

对于 iOS 和 Objective C 似乎有几十个线程,但只有一个用于 macOS 和 swift 没有回答:Access an IBOutlet from another class in Swift

在 NSTabView 中,我在另一个选项卡 (Tab3) [.当我按“保存”时,它会从所有选项卡收集信息,包括访问 popup1 的 indexOfSelectedItem 属性。

我的方法:

  1. 创建一个 Tab3 的实例,例如let tab = Tab3()

  2. 通过tab.popup1!.indexOfSelectedItem

    进入插座

执行过程中出错:致命错误: 在解包可选值时意外发现 nil 是的,在执行此命令时,Tab3 的 ViewController 确实已经加载。

我相信这是因为 ViewController 的实例无权访问 IBOutlets。那么,问题仍然存在,我如何访问 IBOutlet 的属性?

1 个答案:

答案 0 :(得分:2)

如何从其他视图控制器访问 IBOutlets:不要。

这违反了封装原则。您应该将另一个视图控制器的视图视为私有视图。

我建议添加一个函数或计算属性“currentlySelectedItem”。从另一个视图控制器,您可以查询。请注意,如果插座尚未加载或用户尚未选择项目,它应返回 Optional。

(你的代码崩溃是因为这个位:let tab = Tab3()

创建您的 Tab3 视图控制器的新实例。它的视图尚未加载。

你也需要解决这个问题。 (您需要找到一种方法来获取指向屏幕上其他视图控制器的指针,而不是创建一个新实例。)如何做到这一点取决于您如何管理应用中的视图控制器。

相关问题