Tom*_*sta 138 storyboard ios
我刚刚创建了一个应用程序,并开始将@ IBOutlet连接到故事板.我将其中一些连接到具有基本样式的UITableViewCell原型单元格中的标签.当我连接它虽然我在故事板中得到这个错误:
从TableViewController到UILabel的detailText Outlet无效.插座无法连接到重复内容.
有人可以帮我吗?我已经按照我一直成功的方式设置了它,但这一次它让我知道了这个错误.
Wai*_*ain 166
创建表视图单元子类并将其设置为原型的类.将插座添加到该类并连接它们.现在,当您配置单元格时,您可以访问插座.
Fan*_*ing 60
通过故事板为您提供了两种类型的表格视图单元格,它们是动态原型和静态单元格
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
}
Run Code Online (Sandbox Code Playgroud)
2.静电池
另一方面,静态单元确实是通过故事板配置的.您必须将UI元素拖动到每个单元格以创建它们.您将从故事板控制单元格编号,高度等.在这种情况下,您将看到一个表格视图,与您从故事板创建的内容完全相同.静态单元格更常用于设置页面,单元格不会发生很大变化.
要控制静态单元格的UI元素,您确实需要将它们直接连接到视图控制器,然后进行设置.
Jus*_*itz 22
如果您使用表格视图来显示"设置"和其他选项(例如内置的"设置"应用程序),则可以在"属性"检查器下将" 表视图内容"设置为" 静态单元格".此外,要执行此操作,必须将表视图嵌入到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
}
Run Code Online (Sandbox Code Playgroud)