在 Swift 中的数组中使用多个部分和多个字典填充 TableView
Posted
技术标签:
【中文标题】在 Swift 中的数组中使用多个部分和多个字典填充 TableView【英文标题】:Populating TableView with multiple sections and multiple dictionary in an array in Swift 【发布时间】:2017-07-22 00:18:44 【问题描述】:我有 3 个类别,我将其用作一个部分。在该部分中,我必须填充字典数组中的数据。这是我的代码:-
var sections = [Category A, Category B, Category C]
var itemsA = [["Item": "item A","ItemId" : "1"],["Item": "item B","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
var itemsB = [["Item": "item A","ItemId" : "1"],["Item": "item B","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
var itemsC = [["Item": "item A","ItemId" : "1"],["Item": "item B","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
func numberOfSections(in tableView: UITableView) -> Int
return self.sections.count
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
return self.sections[section]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return ??
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "StoreCell") as! UITableViewCell
????
????
return cell
我需要明智地填充到表类别中的项目数组。如果有人可以回答。谢谢!
【问题讨论】:
我无法理解你的问题。 是A类的itemA数组吗?' 是的,它是 A@NiravD 类别的数组 【参考方案1】:如果A类的itemA数组,B类的itemB数组等等,那么您可以通过这种方式返回numberOfRowsInSection
中的数组计数。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
switch (section)
case 0:
return itemsA.count
case 1:
return itemsB.count
default:
return itemsC.count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "StoreCell") as! UITableViewCell
switch (indexPath.section)
case 0:
//Access itemsA[indexPath.row]
case 1:
//Access itemsB[indexPath.row]
default:
//Access itemsC[indexPath.row]
return cell
注意:如果您创建单个结构数组或自定义类,这将使用单个数组减少所有数组。
【讨论】:
好的,对于 cellForRowAtIndexPath 我必须做什么? @shahinaliagharia 同样适用于cellForRowAtIndexPath
,检查编辑后的答案。
在 cellForRowAtIndexPath 中,它给出了部分错误,未解析的标识符。
@shahinaliagharia 忘记添加 indexPath 它 indexPath.section 检查编辑的答案。
@shahinaliagharia 您能否给出突然不接受答案的原因,以便我改进答案。【参考方案2】:
使用自定义结构
struct Category
let name : String
var items : [[String:Any]]
var sections = [Category]()
let itemsA = [["Item": "item A","ItemId" : "1"],["Item": "item B","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
let itemsB = [["Item": "item A","ItemId" : "1"],["Item": "item B","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
let itemsC = [["Item": "item A","ItemId" : "1"],["Item": "item B","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
sections = [Category(name:"A", items:itemsA),
Category(name:"B", items:itemsB),
Category(name:"C", items:itemsC)]
func numberOfSections(in tableView: UITableView) -> Int
return self.sections.count
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
return self.sections[section].name
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
let items = self.sections[section].items
return items.count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "StoreCell") as! UITableViewCell
let items = self.sections[indexPath.section].items
let item = items[indexPath.row]
print(item["ItemId"] as? String)
return cell
如果您还为字典使用自定义结构,您仍然可以改进代码。
【讨论】:
我实现了上面的答案,但它没有在 table@vadian 中显示任何数据 设置好数据源后是否调用reloadData()
?
我的答案中的代码没有将文本分配给任何标签,因为我不知道您的单元格的设计。您需要添加这些行。但它应该将ItemId
值打印到控制台中。
我添加了行但仍然没有得到.. 这是行 cell.storeName.text = item["Item"] as?字符串
我在一个示例项目中成功测试了我的代码,所以错误的原因一定在其他地方。以上是关于在 Swift 中的数组中使用多个部分和多个字典填充 TableView的主要内容,如果未能解决你的问题,请参考以下文章
SWIFT:在具有多个部分的表视图中显示字典时,无法将具有标识符单元格错误的单元格出列