xcode - 通过 IBOutlet 与 Interface Builder 交互的 Swift 类

标签 xcode class swift xcode6

大家晚上好

我正在慢慢开发我的第一个 OS X 应用程序。我一直很难让我的 Swift 类与 NSPopUpButton 交互。为了确保我做对了,我创建了一个新项目并成功删除了所有条目并通过 AppDelegate 在 NSPopUpButton 中输入了文本。但是,一旦我尝试将相同的功能移动到我自己的类中,我什至无法将 IBOutlet 连接连接到新类。

新类是否需要特定的子类类型才能与界面构建器一起正常工作?

这是我创建的类的屏幕截图,以及我尝试调用属于此类的函数的 AppDelegate。

imgur.com/3H7oXRz

最后,这里是有问题的 IB 元素,我应该能够在“自定义类”检查器下选择我自己的类吗?

imgur.com/3H7oXRz,24uE4rl#1

最佳答案

我是一名 iOS 开发人员,但我想同样的原则也适用于您的情况。
ViewController 类和在界面生成器中创建的界面是两个独立的事物。虽然看起来它们是通过 iboutlet 连接的,但它们实际上是独立的,并且可以在没有另一个的情况下实例化一个。
目前,您只是在 App Delegate 中创建 ViewController 类的一个实例——仅此而已。系统根本不知道你的 xib 存在!只有当您的应用程序将您的 xib 连接到您的 ViewController 类时, socket 才会连接。
我们如何做到这一点?其实很简单。而不是像这样实例化我们的 View Controller :

let viewcontroller = ViewController()

我们会在实例化中将我们的 View Controller 连接到我们的 xib:

let viewcontroller = ViewController(nibName: "MainWindow", bundle: NSBundle().mainBundle)

nibName 告诉系统你的 xib 的文件名,NSBundle().mainBundle 告诉系统在哪里寻找 xib。
就像你提到的那样,只有当你的 xib 被分配了一个自定义类时,这一切才有效。在界面生成器中的 xib 中,选择整个 View Controller 。然后,在自定义类检查器中输入您的 ViewController 类的名称(在您的例子中:ViewController - 它应该自动完成)。这将确保您的 socket 已连接。
你应该被设置!如果您还有其他问题,请告诉我。
祝你好运!

编辑: 这取代了我的答案的第一部分,但是关于在 Storyboard 中连接事物的部分仍然是正确的。重新考虑后,我相信我已经意识到我们只是在创建 View Controller ,而不是将它添加到我们的 View 中。尽管如此,我相信我们可以通过向 View Controller 子类(我们在 Storyboard 中设置的方法)添加一个方法来采取捷径解决方案。开始输入 viewDidLoad,它应该会自动完成。在方法的开头输入 super.viewDidLoad()。之后,键入 self.listUpdate()。如果类在 Storyboard 中正确连接,这应该可以工作。这意味着您可以删除在 App Delegate 中创建的变量。

引用:您可能还会发现 Apple 关于创建 View Controller 的文档(它在 Objective C 在线,但可以轻松转换为 Swift - 这是重要的概念):NSViewController Class Reference

关于xcode - 通过 IBOutlet 与 Interface Builder 交互的 Swift 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26268833/

相关文章:

ios - info.plist 中的奇怪文本正确的文本应该是什么

C++: "error C4430: missing type specifier - int assumed"对于构造函数和析构函数的无效声明

swift - SKSprite节点链

ios - Xcode Cocos2D - 警告所有应用程序应包含 armv7 架构

ios - UITableView - 破坏性的 UIContextualAction 不重新加载数据

c++ - 从侧面而不是从中心缩放 CCSprite

c++ - 我应该上课而不是重复的 get/set 语句吗?

java - 如果我的类有很多子对象,我如何初始化一个作为我的类的随机子对象的对象?

ios - 通过 tuist/XcodeProj 以编程方式将文件添加到 native 目标

swift - 数组元素分配导致昂贵的 _ArrayBuffer Protocol.init(copying :)