无法在 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 文件吗? 导入我做了这个线程中的事情的组合,我终于成功了。
在界面生成器(不是 xcode)中
-
文件->重新加载所有类文件
文件->读取类文件(选择 MyClass.h)
通过重新连接文件的所有者
一种。将班级设置为“我的班级”
湾。将视图重新连接到文件所有者的视图
现在一切都恢复正常了。很奇怪。
希望这有助于而不是令人困惑;-)
【讨论】:
文件选项卡没有重新加载所有类文件【参考方案2】:遇到同样的问题。
通过在身份检查器上仔细检查我的文件所有者“类”属性来修复它。
【讨论】:
【参考方案3】:在 Interface Builder File->Read Class Files 中,并将其指向文件所有者的类。这为我解决了问题。
【讨论】:
【参考方案4】:您确定文件的所有者已正确设置为您的自定义 UIViewController,并且在将 IBOutlet
关键字添加到实例变量后,您已保存您的 .h
文件并且 财产?
【讨论】:
我肯定文件所有者的类型与自定义 UIViewController 相同。我很肯定我也保存了 .h 文件。这是 .h 文件的样子: #import.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 实例的剪辑