无法在 Interface Builder 中连接 IBOutlet

Posted

技术标签:

【中文标题】无法在 Interface Builder 中连接 IBOutlet【英文标题】:Can't connect IBOutlet in Interface Builder 【发布时间】:2009-11-17 02:47:52 【问题描述】:

我有一个奇怪的经历。我创建任何类型的 iPhone 应用程序,添加带有 Xib 文件的 UIViewController。我可以使用控件编辑 xib 文件,并在运行时查看它们的呈现。现在我正在尝试向控制器添加一些 IBOutlets,所以我将它们添加到 .h 文件中,在 .m 文件上进行合成。然后我前往 Interface Builder 连接插座。我将 UILabel 拖到 UIView,然后尝试连接文件所有者(我的自定义 UIViewController),但是当我尝试连接到 UILabel 时,我只能选择“视图”,这显然是错误的。所以我无法将 IBOutlets 连接到他们在 Interface Builder 中的控件。

有什么想法吗?

【问题讨论】:

发布@interface 块的代码...你保存了.h 文件吗? 导入 @interface gg : UIViewController IBOutlet UILabel *label; @property (nonatomic, 保留) IBOutlet UILabel *label; @end 知道如何解决 xCode4 的问题吗? 另外确保在 ios -> Source 部分下创建 Cocoa Touch 类,我创建了 swift 文件并想了一段时间,并确保类名在界面构建器(即视图控制器)中匹配。 【参考方案1】:

我做了这个线程中的事情的组合,我终于成功了。

在界面生成器(不是 xcode)中

    文件->重新加载所有类文件 文件->读取类文件(选择 MyClass.h) 通过重新连接文件的所有者 一种。将班级设置为“我的班级” 湾。将视图重新连接到文件所有者的视图

现在一切都恢复正常了。很奇怪。

希望这有助于而不是令人困惑;-)

【讨论】:

文件选项卡没有重新加载所有类文件【参考方案2】:

遇到同样的问题。

通过在身份检查器上仔细检查我的文件所有者“类”属性来修复它。

【讨论】:

【参考方案3】:

在 Interface Builder File->Read Class Files 中,并将其指向文件所有者的类。这为我解决了问题。

【讨论】:

【参考方案4】:

您确定文件的所有者已正确设置为您的自定义 UIViewController,并且在将 IBOutlet 关键字添加到实例变量后,您已保存您的 .h 文件并且 财产?

【讨论】:

我肯定文件所有者的类型与自定义 UIViewController 相同。我很肯定我也保存了 .h 文件。这是 .h 文件的样子: #import @interface gg : UIViewController IBOutlet UILabel *label; @property (nonatomic, 保留) IBOutlet UILabel *label; @end 那很奇怪。您是否尝试过删除 .xib.h.m 文件并重新创建它们? 是的。我尝试了所有这些。也重新启动。更奇怪的是我的旧项目没有给我这种行为,但我创建的新项目给了我这种体验。很奇怪。 即使我检查了自定义视图控制器上的连接选项卡,我也看不到我添加到 .h 文件中的新插座 添加支持的“智能感知”提示在 .m 文件中不起作用是否有帮助。【参考方案5】:

您是否确保在 .h 文件中将您的网点定义为适当的类型?如果您尝试连接 IB 中的文本字段,那么您的 .h 文件应该类似于...

IBOutlet UITextField    *MyTextField;

确保类型是 UITextField(或 UITextView 等)。如果您将它们键入为 NSString 或任何不合适的内容,则无法在 Interface Builder 中连接它们....

【讨论】:

【参考方案6】:

我遇到的问题和你差不多。我不知道您是否解决了您的问题,但我的问题是我更改了所有类的名称,包括视图控制器,但文件所有者的名称保持不变。 所以,我双击文件的所有者 -> 在打开的窗口中单击 i -> 将“类”字段中的名称更改为新的视图控制器名称。然后它起作用了。 也许你想再试一次,看看它是否有效。 祝你好运。

【讨论】:

【参考方案7】:

如果您无法通过右键单击(或 CTRL)-> 下拉列表将 UI 控件连接到代码,还有另一种方法。在界面构建器中,按住 CTRL,将鼠标从界面构建器主窗口中的“文件所有者”移到您的 UI 控件(标签、按钮等)。将出现所有由您定义的 dpopdown 列表。只是需要一个选择!

【讨论】:

是的,我们知道那个解决方案,但问题是出口没有出现在列表中。【参考方案8】:

我对 LONGEST 也有同样的问题。在类标识窗口中将我的文件所有者“类型”更改为“MyClassViewController”而不是“UIViewController”解决了我的问题。这是有道理的,因为 File 的所有者类型是 UIViewController,它只会显示特定于基类的那些属性。将类型更改为 MyClassViewController 可以访问它的插座和所有继承的实例。希望这会有所帮助!

【讨论】:

【参考方案9】:

File->Read Class Files (select MyClass.h) 为我完成了这项工作。

【讨论】:

嘿,我也有同样的问题,但是在文件菜单中找不到“读取类文件”选项请帮助..我使用的是xcode 4。 @AbhinandanSahgal 你有没有在 xCode 4 中找到该选项。我遇到了同样的问题。【参考方案10】:

XCode -> Product -> Clean

为我工作。

【讨论】:

【参考方案11】:

我遇到了同样的问题,我只是尝试了diatrevolo的建议:点击文件,然后读取类文件,然后指向你的文件的所有者类。

这为我解决了问题。我会 +1 diatrevolo,但我还没有任何声誉......

【讨论】:

【参考方案12】:

每次都杀了我,但有时如果你只是关闭并重新打开 xcode,事情就解决了......恰好发生在我身上这个确切的问题......

【讨论】:

【参考方案13】:

对我来说,问题是我创建了一个 MyUITextView 扩展 UITextView 并且 X-Code 无法连接。 我的解决方法是在 IBOutlet 中临时使用UITextView 来连接/链接,然后更改为我的自定义视图。

所以我改变了。

IBOutlet MyUITextView *tv;

IBOutlet UITextView *tv;

然后连接/链接。 连接后,我将 OBOutlet 改回 MyUITextView

IBOutlet MyUITextView *tv;

【讨论】:

【参考方案14】:

重新启动 Xcode 5.1 对我有用。

【讨论】:

【参考方案15】:

我写出来了

@IBOutlet weak var title: UILabel!

在 UIViewController 文本文件中,然后从文件连接到情节提要中的标签,它起作用了!

【讨论】:

【参考方案16】:

所以我不知道为什么它不能自动建立 IBOutlet 连接,但我找到了一种解决方法。我必须通过 Interface Builder 中的库为我的客户视图控制器手动添加插座。如果有人找到了让它自动从 .h 文件中读取的修复程序(就像它应该做的那样),如果他们发布它,我将非常感激。

谢谢

【讨论】:

【参考方案17】:

我在这方面完全是新手,我也遇到了同样的问题。我去尝试了diatrevolo 的建议,并在这样做的过程中找出了导致我的问题的原因。我最初在项目层次结构中随机创建了我的 ViewController,然后将它们移动到类文件夹中。这意味着实际文件不在类文件夹中,但项目认为它们在,所以 IB 找错了地方。我使用 Finder 将实际文件移动到实际的类文件中,然后在项目中删除并读取它们。然后一切正常!

【讨论】:

【参考方案18】:

在我本地化了一些 XIB 文件后,视图对 Interface Builder 中所做的任何更新都没有反应。简单的解决方案是从模拟器/设备中删除应用程序。下一次 Build&Run 正确更新了应用程序。

这只发生在通过 XCode 在模拟器上部署应用程序时。似乎 XCode 正在尝试优化构建并感到困惑。

【讨论】:

【参考方案19】:

我在这里也遇到了麻烦,最终对我有用的是在打开 Interface Builder 之前构建应用程序。巫毒!

【讨论】:

以上是关于无法在 Interface Builder 中连接 IBOutlet的主要内容,如果未能解决你的问题,请参考以下文章

Interface Builder 和 Cocoa:在 App Controller 类后面连接

无法在 Interface Builder 中绑定 UISearchBar

swift : 无法与 Interface Builder 通信

无法关闭在 Interface Builder 中创建的 NSView 实例的剪辑

从 Interface Builder 连接时,GestureRecognizer 操作未触发

无法在 Interface Builder 中关闭键盘,因为视图控制器不会显示 doneEditing: