无法与 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 中的约束建立出口连接的主要内容,如果未能解决你的问题,请参考以下文章