如何为 UITableView 中的每个单元格类别指定特定的部分名称
how to give a specific section name to each category of cell in a UITableView
我正在构建一个用户个人资料 table 视图,其中包含 2 种类型的单元格。
第一个单元格包含一个图像视图和一个标签(分别用于用户图像及其名称)
第二个包含 2 个并排的标签(一个用于职位名称,另一个用于职位描述)。
我希望达到的结果是:
- 每个单元格类型都在一个部分下
- 第一部分仅包含一个单元格(图像和标签)
- 第二部分包含 3 个单元格(第二种类型)。
我设法实现的是:
- 我有正确的部分names/titles
- 我有正确的节数
- 第 1 部分只有一种类型的单元格(正确的类型)
- 但是在第 2 部分,我有第一种细胞类型和第二种细胞类型。
我想从第 2 部分中删除第一种类型的单元格。这是我的代码:
//MARK: - 2 CELLS CLASS
class ImageCell: UITableViewCell {
@IBOutlet weak var candidatePicture: UIImageView!
@IBOutlet weak var candidateNameLabel: UILabel!
}
//
class ItemCell: UITableViewCell {
@IBOutlet weak var itemNameLabel: UILabel!
@IBOutlet weak var itemDetailLabel: UILabel!
}
class CandidateUserProfileScreenTableViewController: UITableViewController {
//MARK: RELEVANT VARIABLES
let sectionNameArray: [String] = ["Candidate ID", "Jobs"]
let candidateId = ["Name"]
let candidateJobs = ["job 1", "job2", "job3"]
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return sectionNameArray.count
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
//return sectionNameArray[0]
return sectionNameArray[section]
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
//return 4
switch section {
case 0:
return candidateId.count
case 1:
return candidateJobs.count
default:
fatalError("there was a mistake in my code")
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// en fonction de index path
// index path == 0 on affiche la cellule avec image
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "imageCell", for: indexPath) as! ImageCell
//
cell.candidatePicture.image = UIImage(named: "welcome")
cell.candidateNameLabel.text = "John SMITH"
return cell
}
// sinon on affiche le second type de cellule
let cell = tableView.dequeueReusableCell(withIdentifier: "itemCell", for: indexPath) as! ItemCell
cell.itemNameLabel.text = "Job 1"
cell.itemDetailLabel.text = "Job 1 detail"
return cell
}
您需要使用 indexPath.section == 0
检查该部分是否是第一个部分,而不是使用 indexPath.row == 0
检查行以在 cellForRow
方法中返回适当的单元格。
替换:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
与:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section == 0 {
我正在构建一个用户个人资料 table 视图,其中包含 2 种类型的单元格。 第一个单元格包含一个图像视图和一个标签(分别用于用户图像及其名称)
第二个包含 2 个并排的标签(一个用于职位名称,另一个用于职位描述)。
我希望达到的结果是:
- 每个单元格类型都在一个部分下
- 第一部分仅包含一个单元格(图像和标签)
- 第二部分包含 3 个单元格(第二种类型)。
我设法实现的是:
- 我有正确的部分names/titles
- 我有正确的节数
- 第 1 部分只有一种类型的单元格(正确的类型)
- 但是在第 2 部分,我有第一种细胞类型和第二种细胞类型。
我想从第 2 部分中删除第一种类型的单元格。这是我的代码:
//MARK: - 2 CELLS CLASS
class ImageCell: UITableViewCell {
@IBOutlet weak var candidatePicture: UIImageView!
@IBOutlet weak var candidateNameLabel: UILabel!
}
//
class ItemCell: UITableViewCell {
@IBOutlet weak var itemNameLabel: UILabel!
@IBOutlet weak var itemDetailLabel: UILabel!
}
class CandidateUserProfileScreenTableViewController: UITableViewController {
//MARK: RELEVANT VARIABLES
let sectionNameArray: [String] = ["Candidate ID", "Jobs"]
let candidateId = ["Name"]
let candidateJobs = ["job 1", "job2", "job3"]
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return sectionNameArray.count
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
//return sectionNameArray[0]
return sectionNameArray[section]
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
//return 4
switch section {
case 0:
return candidateId.count
case 1:
return candidateJobs.count
default:
fatalError("there was a mistake in my code")
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// en fonction de index path
// index path == 0 on affiche la cellule avec image
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "imageCell", for: indexPath) as! ImageCell
//
cell.candidatePicture.image = UIImage(named: "welcome")
cell.candidateNameLabel.text = "John SMITH"
return cell
}
// sinon on affiche le second type de cellule
let cell = tableView.dequeueReusableCell(withIdentifier: "itemCell", for: indexPath) as! ItemCell
cell.itemNameLabel.text = "Job 1"
cell.itemDetailLabel.text = "Job 1 detail"
return cell
}
您需要使用 indexPath.section == 0
检查该部分是否是第一个部分,而不是使用 indexPath.row == 0
检查行以在 cellForRow
方法中返回适当的单元格。
替换:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
与:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section == 0 {