将 Table 视图中的部分添加到我的现有列表?
Adding sections in Table View to my existing list?
是否可以将部分添加到我现有的列表中?或者我可以以某种方式对其进行硬编码吗?这样第3行和第4行被一个节隔开,第9行和第10行被一个节隔开等等
我尝试添加部分,但不是很成功:
列表文件:
import Foundation
class ListItem {
var section = ""
var listItem = ""
var description = ""
var extraInfo = ""
var counter: Int = 0
init(section: String, listItem: String, description: String, ekstraInfo: String) {
self.section = section
self.listItem = listItem
self. description = description
self.ekstraInfo = ekstraInfo
}
}
视图控制器:
let staticList: [ListItem] =
[
ListItem(section: "Section 1", listItem: "Bananas", description: "Yellow", ekstraInfo: "Bent"),
ListItem(section: "Section 2", listItem: "Apples", description: "Red", ekstraInfo: "Round"),
ListItem(section: "Section 3", listItem: "Strawberries", description: "Red", ekstraInfo: ""),
ListItem(section: "Section 4", listItem: "Carrots", description: "Orange", ekstraInfo: ""),
ListItem(section: "Section 5", listItem: "Lime", description: "Green", ekstraInfo: "Round"),
]
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
{
if (tableView == MainTableView)
{
return staticList[section].section
}else
{
return nil
}
}
编辑:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell
cell = tableView.dequeueReusableCell(withIdentifier: "MenuCell", for: indexPath)
if let customCell = cell as? MenuCell
{
let itemIndex = indexPath.row
let listItem = staticList[itemIndex]
customCell.itemLabel.text = listItem.listItem
customCell.descriptionLabel.text = listItem.description
customCell.exstraInfoLabel.text = listItem.exstraInfo
customCell.counterLabel.text = "\(listItem.counter)"
customCell.delegate = self
}
return cell
}
}
我将分享一些硬编码部分的示例。这应该可以帮助您了解其工作原理。
let numberOfRows = [2, 3, 1, 4, 5]
这里我们有一个整数数组,表示行数。基本上有 5 个部分,每个部分分别有 2、3...5 行
将以下内容添加到您的 UITableViewDataSource
中:
func numberOfSections(in tableView: UITableView) -> Int {
return numberOfRows.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return numberOfRows[section]
}
这应该给你一个 UITableView
有 5 个部分,每个部分分别有 2、3、1、4、5 行。
尝试 numberOfRows
以获得更多部分、更多行等。
编辑:
每个部分加载相同单元格的原因是因为 staticList
是一维数组。因此,在每个部分中,相同的行不断获取,因为每个部分的 indexPath.row
从 0 开始。要解决此问题,请将 staticList
设为二维数组。方法如下...
let staticList: [[ListItem]] = [
[
ListItem(section: "Section 1", listItem: "Bananas", description: "Yellow", ekstraInfo: "Bent"),
ListItem(section: "Section 1", listItem: "Apples", description: "Red", ekstraInfo: "Round")
],
[
ListItem(section: "Section 2", listItem: "Strawberries", description: "Red", ekstraInfo: "")
],
[
ListItem(section: "Section 3", listItem: "Carrots", description: "Orange", ekstraInfo: ""),
ListItem(section: "Section 3", listItem: "Lime", description: "Green", ekstraInfo: "Round")
]
]
现在 staticList
有 3 个部分,每个部分分别有 2、1、2 ListItem
。
最后,对 cellForRowAtIndexPath 函数做一个小改动...
// let itemIndex = indexPath.row
// let listItem = staticList[itemIndex]
let listItem = staticList[indexPath.section][indexPath.row]
顺便说一句,您可以从 ListItem
中删除 section
属性 以使内容更清晰。离开它应该不会破坏任何东西。
是否可以将部分添加到我现有的列表中?或者我可以以某种方式对其进行硬编码吗?这样第3行和第4行被一个节隔开,第9行和第10行被一个节隔开等等
我尝试添加部分,但不是很成功:
列表文件:
import Foundation
class ListItem {
var section = ""
var listItem = ""
var description = ""
var extraInfo = ""
var counter: Int = 0
init(section: String, listItem: String, description: String, ekstraInfo: String) {
self.section = section
self.listItem = listItem
self. description = description
self.ekstraInfo = ekstraInfo
}
}
视图控制器:
let staticList: [ListItem] =
[
ListItem(section: "Section 1", listItem: "Bananas", description: "Yellow", ekstraInfo: "Bent"),
ListItem(section: "Section 2", listItem: "Apples", description: "Red", ekstraInfo: "Round"),
ListItem(section: "Section 3", listItem: "Strawberries", description: "Red", ekstraInfo: ""),
ListItem(section: "Section 4", listItem: "Carrots", description: "Orange", ekstraInfo: ""),
ListItem(section: "Section 5", listItem: "Lime", description: "Green", ekstraInfo: "Round"),
]
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
{
if (tableView == MainTableView)
{
return staticList[section].section
}else
{
return nil
}
}
编辑:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell
cell = tableView.dequeueReusableCell(withIdentifier: "MenuCell", for: indexPath)
if let customCell = cell as? MenuCell
{
let itemIndex = indexPath.row
let listItem = staticList[itemIndex]
customCell.itemLabel.text = listItem.listItem
customCell.descriptionLabel.text = listItem.description
customCell.exstraInfoLabel.text = listItem.exstraInfo
customCell.counterLabel.text = "\(listItem.counter)"
customCell.delegate = self
}
return cell
}
}
我将分享一些硬编码部分的示例。这应该可以帮助您了解其工作原理。
let numberOfRows = [2, 3, 1, 4, 5]
这里我们有一个整数数组,表示行数。基本上有 5 个部分,每个部分分别有 2、3...5 行
将以下内容添加到您的 UITableViewDataSource
中:
func numberOfSections(in tableView: UITableView) -> Int {
return numberOfRows.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return numberOfRows[section]
}
这应该给你一个 UITableView
有 5 个部分,每个部分分别有 2、3、1、4、5 行。
尝试 numberOfRows
以获得更多部分、更多行等。
编辑:
每个部分加载相同单元格的原因是因为 staticList
是一维数组。因此,在每个部分中,相同的行不断获取,因为每个部分的 indexPath.row
从 0 开始。要解决此问题,请将 staticList
设为二维数组。方法如下...
let staticList: [[ListItem]] = [
[
ListItem(section: "Section 1", listItem: "Bananas", description: "Yellow", ekstraInfo: "Bent"),
ListItem(section: "Section 1", listItem: "Apples", description: "Red", ekstraInfo: "Round")
],
[
ListItem(section: "Section 2", listItem: "Strawberries", description: "Red", ekstraInfo: "")
],
[
ListItem(section: "Section 3", listItem: "Carrots", description: "Orange", ekstraInfo: ""),
ListItem(section: "Section 3", listItem: "Lime", description: "Green", ekstraInfo: "Round")
]
]
现在 staticList
有 3 个部分,每个部分分别有 2、1、2 ListItem
。
最后,对 cellForRowAtIndexPath 函数做一个小改动...
// let itemIndex = indexPath.row
// let listItem = staticList[itemIndex]
let listItem = staticList[indexPath.section][indexPath.row]
顺便说一句,您可以从 ListItem
中删除 section
属性 以使内容更清晰。离开它应该不会破坏任何东西。