我刚刚创建了一个应用程序并开始将@IBOutlet 连接到情节提要。我将它们中的一些连接到具有基本样式的 UITableViewCell 原型单元中的标签。当我连接它时,虽然我在情节提要中收到此错误:
从 TableViewController 到 UILabel 的 detailText Outlet 无效。插座不能连接到重复的内容。
有人可以帮我吗?我已经按照我一直成功的方式进行了设置,但这次它让我遇到了这个错误。
创建一个表格视图单元子类并将其设置为原型的类。将插座添加到该类并连接它们。现在,当您配置单元时,您可以访问插座。
通过情节提要为您提供了两种类型的表格视图单元格,它们是动态原型和静态单元格
https://i.stack.imgur.com/aYzxr.gif
1. 动态原型
从名称上看,这种类型的单元格是动态生成的。它们是通过您的代码控制的,而不是故事板。借助表格视图的委托和数据源,您可以以编程方式指定单元格的数量、单元格的高度、单元格的原型。
当你将一个单元格拖到你的表格视图中时,你就是在声明一个单元格的原型。然后,您可以基于此原型创建任意数量的单元格,并通过 cellForRow
方法以编程方式将它们添加到表格视图中。这样做的好处是您只需要定义 1 个原型,而不是创建每个单元格并自己添加所有视图(参见静态单元格)。
因此,在这种情况下,您无法将单元原型上的 UI 元素连接到您的视图控制器。您只会启动一个视图控制器对象,但您可能会启动许多单元格对象并将其添加到表视图中。将单元原型连接到视图控制器是没有意义的,因为您无法通过一个视图控制器连接来控制多个单元。如果你这样做,你会得到一个错误。
https://i.stack.imgur.com/Qhfxn.gif
要解决此问题,您需要将原型标签连接到 UITableViewCell
对象。 UITableViewCell
也是单元格的原型,您可以根据需要启动任意数量的单元格对象,然后将每个单元格对象连接到从情节提要表格单元格原型生成的视图。
https://i.stack.imgur.com/cpjjl.gif
最后,在您的 cellForRow
方法中,从 UITableViewCell
类创建自定义单元格,并使用标签做一些有趣的事情
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellIdentifier") as! YourCell
cell.label.text = "it works!"
return cell
}
2. 静态细胞
另一方面,静态单元确实是通过情节提要配置的。您必须将 UI 元素拖到每个单元格中才能创建它们。您将从情节提要中控制单元格编号、高度等。在这种情况下,您将看到与您从情节提要创建的内容相比,手机中的表格视图完全相同。静态单元格更常用于设置页面,其中单元格变化不大。
要控制静态单元格的 UI 元素,您确实需要将它们直接连接到视图控制器并进行设置。
https://i.stack.imgur.com/JRbmE.gif
+100
如果您使用表格视图来显示设置和其他选项(就像内置的设置应用程序一样),那么您可以在属性检查器下将表格视图内容设置为静态单元格。此外,为此,您必须将 Table View 嵌入 UITableViewController 实例中。
或者您不必使用 IBOutlet 来引用视图中的对象。您可以给 tableViewCell 中的 Label 一个 Tag 值,例如将 Tag 设置为 123(这可以通过属性检查器完成)。然后您可以通过以下方式访问标签
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "someID", for: indexPath)
let label = cell.viewWithTag(123) as! UILabel //refer the label by Tag
switch indexPath.row {
case 0:
label.text = "Hello World!"
default:
label.text = "Default"
}
return cell
}
我有一个 UIViewcontroller
,在其中我有一个带有自定义单元格的表格视图。我将我的 UILabel 出口映射到 UItableviewcell
到 UIViewController
然后得到错误。
正如大多数人所指出的,subclassing UITableViewCell
解决了这个问题。但不允许这样做的原因是原型单元(UITableViewCell)是由 Apple 定义的,您不能向其中添加任何自己的插座。
有时 Xcode 无法正确控制电池插座连接。
不知何故,我当前单元格的标签/按钮连接了另一个单元格,我只需删除它们,错误就会消失。
对于 collectionView :
解决方案:
从 viewcontroller 中,请删除 colllectionviewcell 的 IBoutlet
.该问题提到您的 IBOutlet 无效。所以删除所有具有多出口(无效)的子类并重新连接它。
The answer is already mentioned in another question for collectionviewcell
单击模拟器,导航到窗口并启用设备边框