3 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
Swift 3.0 +最少代碼更新
基本概念: 使用動(dòng)態(tài)單元原型創(chuàng)建表視圖。分配標(biāo)識(shí)符并為每個(gè)單元原型創(chuàng)建自定義表格視圖單元類。在表視圖的委托方法中啟動(dòng)并顯示自定義單元格。
1.在情節(jié)提要板上創(chuàng)建單元格
將tableView拖到您的視圖控制器,向其添加原型單元,然后將UI元素拖放至您的表視圖單元,并根據(jù)需要適當(dāng)添加約束。
2.創(chuàng)建自定義UITableViewCell類
將以下代碼添加到您的項(xiàng)目。我把它放在視圖控制器類之上。
class FirstTableCell: UITableViewCell {
}
class SecondTableCell: UITableViewCell {
}
class ThirdTableCell: UITableViewCell {
}
3.將自定義類和標(biāo)識(shí)符分配給單元原型
對(duì)于情節(jié)提要中的每個(gè)單元原型,分配從步驟2創(chuàng)建的自定義類,然后輸入唯一的標(biāo)識(shí)符。
4.將UI元素連接到快速代碼
Control拖動(dòng)表視圖并連接到視圖控制器類。控件拖動(dòng)在步驟1中添加到單元原型的UI元素,并連接到相應(yīng)的表視圖單元類。
5.添加代碼以查看控制器并控制表視圖
使您的視圖控制器符合表視圖委托
class YourViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
在中viewDidLoad,設(shè)置表視圖的委托和數(shù)據(jù)源。
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.dataSource = self
self.tableView.delegate = self
}
最后,根據(jù)最低要求,添加兩個(gè)委托方法來(lái)控制您的表視圖。
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貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
上面的答案是最好的答案,但是有很多原因可以解決此問(wèn)題。對(duì)于有此問(wèn)題的任何人,這是另一個(gè)潛在的解決方案:
我的問(wèn)題是我在選擇ViewController類而不是Storyboard視圖。因此,由于未使用情節(jié)提要,因此我對(duì)情節(jié)提要單元的引用毫無(wú)意義。
我正在這樣做:
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)
添加回答
舉報(bào)