Xcode Swift类通过IBOutlet与接口生成器交互

Xcode Swift类通过IBOutlet与接口生成器交互,xcode,class,swift,xcode6,Xcode,Class,Swift,Xcode6,大家晚上好 我正在慢慢地使用我的第一个OSX应用程序。我一直很难让我的Swift课程与NSpoupButton互动。为了确保我做得正确,我创建了一个新项目,并成功地删除了所有条目,并通过AppDelegate将文本输入到NSPopUpButton中。然而,当我尝试将相同的功能移动到自己的类时,我甚至无法将IBOutlet连接到新类 新类是否需要特定的子类类型才能与interface builder正常工作 下面是我创建的类的屏幕截图,以及我试图调用属于该类的函数的AppDelegate 最后,

大家晚上好

我正在慢慢地使用我的第一个OSX应用程序。我一直很难让我的Swift课程与NSpoupButton互动。为了确保我做得正确,我创建了一个新项目,并成功地删除了所有条目,并通过AppDelegate将文本输入到NSPopUpButton中。然而,当我尝试将相同的功能移动到自己的类时,我甚至无法将IBOutlet连接到新类

新类是否需要特定的子类类型才能与interface builder正常工作

下面是我创建的类的屏幕截图,以及我试图调用属于该类的函数的AppDelegate

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


我是一名iOS开发人员,但我认为同样的原则也适用于您的情况
在interface builder中创建的ViewController类和接口是两个独立的东西。虽然看起来它们是通过iboutlet连接的,但实际上它们是独立的,一个可以实例化,而另一个可以不实例化
目前,您仅在应用程序委托中创建ViewController类的实例,仅此而已。系统甚至不知道您的xib存在!只有当应用程序将xib连接到ViewController类时,才会连接插座
我们如何做到这一点?其实很简单。而不是像这样实例化我们的视图控制器:

let viewcontroller = ViewController()
我们将在实例化中将视图控制器连接到xib:

let viewcontroller = ViewController(nibName: "MainWindow", bundle: NSBundle().mainBundle)
nibName
告诉系统您的xib的文件名,
NSBundle().mainBundle
告诉系统在哪里查找xib
只有当您的xib被分配了一个自定义类(如您所提到的)时,这一切才起作用。在界面生成器中的xib中,选择整个视图控制器。然后,在自定义类检查器中键入ViewController类的名称(在您的示例中:ViewController-它应该自动完成)。这将确保您的插座已连接
你应该被安排好!!如果你还有什么问题,请告诉我
祝你好运

编辑: 这取代了我答案的第一部分,但是关于在故事板中连接东西的部分仍然是正确的。经过重新考虑,我相信我已经意识到我们只是在创建视图控制器,而不是将其添加到视图中。尽管如此,我相信我们可以通过向视图控制器子类(我们在故事板中设置的方法)添加一个方法来获得一个捷径解决方案。开始输入
viewDidLoad
,它应该会自动完成。在方法开头键入
super.viewDidLoad()
。然后,键入
self.listUpdate()
。如果类在故事板中正确连接,这应该是可行的。这意味着您可以删除在应用程序委托中创建的变量


参考:您可能还可以在手边找到苹果关于创建视图控制器的文档(它在Objective C online中,但可以很容易地转换为Swift-这是一个重要的概念):

@OmarBizreh有关参数的信息告诉我们为什么要指定
mainBundle()
“在其中搜索nib文件的捆绑包。如果指定nil,此方法将在主捆绑包中查找nib文件。“
我们指定
mainBundle()
只是因为如果我们不这样做,它无论如何都会被指定。你想要在Swift for OSX或iOS中入门的参考资料吗?没问题!我们都在学习-我15岁,不久前我还处在你的位置:)。我真的很喜欢故事板,我会尽可能地使用它们-但是,使用它们并不总是可能的。你可能需要这样做将视图控制器嵌入到另一个视图控制器中以实现自定义行为,而这无法在情节提要中实现(您将知道它何时不起作用)。我也是一个ios和osx开发人员无处不在的网站的忠实粉丝。他们在你需要的任何东西上都有很棒的资源-只需搜索
你想知道的
+
wenderlich
wenderlich tutorial
@OmarBizreh如上所示-由于字符限制,不得不添加另一条评论来提及你。@OmarBizreh哈哈,我肯定是这样做的。@OmarBizreh一直在那里!祝你好运,如果你有任何问题,请随时与我联系。@OmarBizreh