无法与 IB 中的约束建立出口连接

Posted

技术标签:

【中文标题】无法与 IB 中的约束建立出口连接【英文标题】:Unable to make outlet connection to a constraint in IB 【发布时间】:2014-02-28 04:13:45 【问题描述】:

我在 ios 7 上运行 XCode 5。我需要在 UITextView 布局之前动态更改其高度约束。我看到很多帖子说这可以通过从 IB 中的约束到源代码的出口连接来完成。我正在尝试从 IB 中的约束出口连接到所属类的头文件,但无法建立连接 - 当我拖过头文件时,IB 不会“突出显示”,就像在建立连接时所做的那样来自按钮等其他对象。

有没有人遇到过这种情况?非常感谢所有帮助。

【问题讨论】:

【参考方案1】:

这是我做这件事的照片。我正在控制从约束拖动到头文件。

在现实生活中,我更有可能控制并拖动到实现文件中的匿名类别,因为我不希望 IBOutlet 属性公开。所以这里也有一张照片。抱歉,此屏幕截图未显示光标:它位于拉伸线的底端。

【讨论】:

谢谢马特。我试图在我的项目中做同样的事情,但 XCode 不想建立连接。我将创建一个测试项目,看看它是否可以在该项目中工作。无法解释为什么 XCode 不想这样做! 谢谢马特!!你为我节省了很多时间!! 太奇怪了,除了保证金限制之外,无法从文件所有者连接到 IB,但这个答案效果很好。【参考方案2】:

您可以通过以下方式进行插座连接:

    打开助手编辑器,然后按 ctrl+拖动您的 textview 到相应的头文件。您应该看到为 textview 创建的属性。

    手动输入@property(nonatomic,retain)IBOutlet UITextField *yourTextField;。打开助手编辑器,从小空圈(属性左侧)拖动到视图控制器中对应的控件。

如果您仍然无法建立连接,请清理并保存您的项目,然后重试。

【讨论】:

如果您连接到 .m 文件的类扩展 @interface 部分而不是您的 .h ,则会获得样式积分它所属的地方。 在 .h 或 .m 文件的 @interface 部分声明无关紧要。 motox - 很抱歉造成混淆,我正在尝试与约束而不是文本视图建立连接。我编辑了我的问题以明确。我可以连接到文本视图和其他对象,但我无法连接到文本视图的高度约束。我试图清理项目,仍然无法建立连接。我看到很多帖子表明可以这样做,但由于某种原因我不能这样做。我也尝试了您的建议 #2(约束与文本视图除外);还是不行。 @johnnyspo 在 IB 中插入 UITextView 后,您应该可以通过底部的“PIN”按钮设置所需的约束。约束规范在 IB 中并不重要,因为您可以动态修改它们。您应该能够在 Document Outline 视图中看到这些约束。现在,转到相应的头文件并输入@property (weak, nonatomic) IBOutlet NSLayoutConstraint *yourTextViewHeight;。然后,您可以将空圆圈从此处拖动到文档大纲视图中的特定约束。【参考方案3】:

您是否尝试在 UIView 类中创建连接?看来您只能在与 Storyboard 中的场景关联的 UIViewController 类中创建连接。

因此,如果您希望从视图本身执行此操作,那么您的解决方法可能是正确的。

【讨论】:

【参考方案4】:

我想我迟到了这个答案,但仍然值得写。我有一个类似的问题。我没有正确设置视图的文件所有者。您可以使用assistant editor 进行简单测试。如果助理编辑器不允许您为视图控制器选择 automatic 选项,则意味着您没有正确设置文件所有者。检查视图控制器是否与 .xib 文件具有相同的名称(通常是这种情况)。

这将让您连接所有 IBOutlets,包括约束。

【讨论】:

【参考方案5】:

好的,仍然无法连接到 IB 中的约束。但是,我通过将文本视图高度约束设置为 IB 中的占位符来解决该问题,并将其替换为在视图的 initWithCoder 中创建的 NSLayoutConstraint。我维护对已创建约束的引用并根据需要修改其“常量”属性。

我可能会坚持使用这种解决方法,但如果有人能帮助我解决原来的问题,将不胜感激。

【讨论】:

以上是关于无法与 IB 中的约束建立出口连接的主要内容,如果未能解决你的问题,请参考以下文章

加载 NIB 并重新建立连接

无法将按钮操作拖动到 Xcode 8 中的现有功能

Xcode 无法识别新的出口和动作连接

Python 3.5.2建立与DB2的连接

IB 中的 Xcode 5.1 故事板文件,找不到文件所有者

出口连接错误插入新的出口连接