3 回答
TA贡献1806条经验 获得超5个赞
Swift 3.0 +最少代码更新
基本概念: 使用动态单元原型创建表视图。分配标识符并为每个单元原型创建自定义表格视图单元类。在表视图的委托方法中启动并显示自定义单元格。
1.在情节提要板上创建单元格
将tableView拖到您的视图控制器,向其添加原型单元,然后将UI元素拖放至您的表视图单元,并根据需要适当添加约束。
2.创建自定义UITableViewCell类
将以下代码添加到您的项目。我把它放在视图控制器类之上。
class FirstTableCell: UITableViewCell {
}
class SecondTableCell: UITableViewCell {
}
class ThirdTableCell: UITableViewCell {
}
3.将自定义类和标识符分配给单元原型
对于情节提要中的每个单元原型,分配从步骤2创建的自定义类,然后输入唯一的标识符。
4.将UI元素连接到快速代码
Control拖动表视图并连接到视图控制器类。控件拖动在步骤1中添加到单元原型的UI元素,并连接到相应的表视图单元类。
5.添加代码以查看控制器并控制表视图
使您的视图控制器符合表视图委托
class YourViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
在中viewDidLoad,设置表视图的委托和数据源。
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.dataSource = self
self.tableView.delegate = self
}
最后,根据最低要求,添加两个委托方法来控制您的表视图。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "firstTableCell") as! FirstTableCell
// Set up cell.label
return cell
} else if indexPath.row == 1 {
let cell = tableView.dequeueReusableCell(withIdentifier: "secondTableCell") as! SecondTableCell
// Set up cell.button
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "thirdTableCell") as! ThirdTableCell
// Set up cell.textField
return cell
}
}
6.试试看:)
TA贡献1780条经验 获得超4个赞
上面的答案是最好的答案,但是有很多原因可以解决此问题。对于有此问题的任何人,这是另一个潜在的解决方案:
我的问题是我在选择ViewController类而不是Storyboard视图。因此,由于未使用情节提要,因此我对情节提要单元的引用毫无意义。
我正在这样做:
let viewControllerB = SubViewController()
viewControllerB.passedData = diseases[indexPath.row].name
navigationController?.pushViewController(viewControllerB, animated: true)
我需要做这样的事情:
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "SubViewStoryboardController") as! SubViewController
nextViewController.passedData = diseases[indexPath.row].name
self.present(nextViewController, animated:true, completion:nil)
添加回答
举报