我刚刚创建了一个应用程序,并开始将@IBOutlet连接到情节提要。我将其中一些连接到具有基本样式的UITableViewCell原型单元中的标签。当我连接它时,虽然在情节提要中出现此错误:
从TableViewController到UILabel的detailText插座无效。插座不能连接到重复内容。
有人可以帮我吗?我已经按照我一直成功完成的方式进行了设置,但是这次它使我看不到这个错误。
我刚刚创建了一个应用程序,并开始将@IBOutlet连接到情节提要。我将其中一些连接到具有基本样式的UITableViewCell原型单元中的标签。当我连接它时,虽然在情节提要中出现此错误:
从TableViewController到UILabel的detailText插座无效。插座不能连接到重复内容。
有人可以帮我吗?我已经按照我一直成功完成的方式进行了设置,但是这次它使我看不到这个错误。
Answers:
创建一个表格视图单元子类并将其设置为原型的类。将插座添加到该类并连接它们。现在,当您配置单元时,您可以访问出口。
通过情节提要提供给您两种类型的表视图单元,它们是“ 动态原型”和“ 静态单元”
1.动态原型
根据名称,这种类型的单元是动态生成的。它们是通过您的代码而不是情节提要进行控制的。借助表视图的委托和数据源,您可以通过编程方式指定单元格的数量,单元格的高度,单元格的原型。
当您将一个单元格拖动到表格视图时,您就在声明一个单元格的原型。然后,您可以基于此原型创建任意数量的单元格,并通过cellForRow
方法以编程方式将它们添加到表视图中。这样做的好处是,您只需要定义1个原型,而不用创建自己添加了所有视图的每个单元(请参见静态单元)。
因此,在这种情况下,您无法将单元原型上的UI元素连接到视图控制器。您将只启动一个视图控制器对象,但是您可能启动了许多单元对象并将其添加到表视图中。将单元原型连接到视图控制器没有任何意义,因为您无法使用一个视图控制器连接来控制多个单元。如果这样做,您将得到一个错误。
要解决此问题,您需要将原型标签连接到UITableViewCell
对象。A UITableViewCell
也是单元格的原型,您可以启动任意数量的单元格对象,然后将它们中的每个对象连接到从情节提要表单元格原型生成的视图。
最后,在您的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元素,您确实确实需要将它们直接连接到视图控制器,并进行设置。
+100
如果您使用表格视图显示“设置”和其他选项(例如内置的“设置”应用程序),则可以在“属性”检查器下将“ 表格视图内容”设置为“ 静态单元格”。另外,为此,您必须将表视图嵌入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
然后得到了错误。
正如大多数人指出的那样,子类化 UITableViewCell
解决了这个问题。但是之所以不允许这样做,是因为原型单元(UITableViewCell)是由Apple定义的,因此您无法向其添加任何自己的插座。
有时Xcode无法控制正确的电池出口连接。
我当前单元格的标签/按钮不知何故连接了另一个单元格,我只是将其移除,错误消失了。