无法在IB中将插座连接到约束。

24
我正在使用iOS 7和XCode 5。在布局之前,我需要动态更改UITextView的高度约束。我看到很多帖子说可以通过从IB中的约束创建一个outlet连接到源代码来实现。我试图从IB中的约束出口连接到所属类的头文件,但无法进行连接 - IB不会像从其他对象(如按钮等)创建连接时一样“突出显示”。有人遇到过这种情况吗?非常感谢任何帮助。
5个回答

53

这是我在进行的操作图片。我正在从约束条件中控制拖拽到头文件。

enter image description here

在实际操作中,我更可能控制拖动到实现文件中的匿名类别,因为我不希望IBOutlet属性公开。所以这里也有一张图片。很抱歉,这张截图没有显示光标:它在拉伸线的底端。

enter image description here


谢谢Matt。我正在尝试在我的项目中做完全相同的事情,但XCode不想建立连接。我将创建一个测试项目并查看它是否能在该项目中工作。无法解释为什么XCode不想这样做! - johnnyspo
谢谢Matt!!你刚刚为我节省了很多时间!! - Andrew Paul Simmons
很奇怪,除了边距约束之外,无法从文件所有者连接到IB,但是这个答案很有效。 - KoreanXcodeWorker

3
您可以通过以下方式进行插座连接:
  1. 打开助手编辑器,然后使用ctrl+拖动您的textview到相应的头文件中。您应该会看到为textview创建的属性。

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

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


1
如果你将类扩展的@ interface部分连接到.m文件而不是.h文件,那么你将获得风格分。没有其他人需要看到那些噪音,在.m文件中定义它们即可。 - ryan cumley
在.h或.m文件的@interface部分声明并不重要。 - motox
motox - 对于混淆感到抱歉,我正在尝试与约束建立连接,而不是文本视图。我编辑了我的问题以使其更清晰。我可以将连接建立到文本视图和其他对象,但我无法将连接建立到文本视图的高度约束上。我尝试过清理项目,但仍然无法建立连接。我看到许多帖子表明这是可以做到的,但出于某种原因我无法做到。我也尝试了您的建议#2(除了约束与文本视图之外),但仍然不起作用。 - johnnyspo
2
@johnnyspo 在IB中插入UITextView后,您应该能够通过底部的“PIN”按钮设置所需的约束。在IB中,约束规范并不重要,因为您可以动态修改它们。您应该能够在文档大纲视图中看到这些约束。现在,转到相应的头文件并键入@property (weak, nonatomic) IBOutlet NSLayoutConstraint *yourTextViewHeight;。然后,您可以将此处的空圆拖动到文档大纲视图中的特定约束上。 - motox

1

你是否试图在UIView类中创建连接?似乎你只能在与Storyboard中的场景相关联的UIViewController类中创建连接。

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


1
我觉得我回答晚了,但仍然值得写一下。我有类似的问题。我没有正确设置视图的文件所有者。您可以使用助手编辑器进行简单测试。如果助手编辑器不允许您选择视图控制器的自动选项,则意味着您没有正确设置文件所有者。请检查视图控制器是否与.xib文件具有相同的名称(通常是这种情况)。
这将使您连接所有的IBOutlets,包括约束。

0

好的,仍然无法连接到IB中的约束。但是,我通过将文本视图高度约束作为IB中的占位符来解决了这个问题,我用在视图的initWithCoder中创建的NSLayoutConstraint替换它。我保留对已创建约束的引用,并根据需要修改其“constant”属性。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接