在 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的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 多个部分和标题

Swift中的元组,数组,字典

SWIFT:在具有多个部分的表视图中显示字典时,无法将具有标识符单元格错误的单元格出列

将一张图像分成多个部分后,如何在 Swift 中使用 UIImage 数组?

swift:安全访问 SCNNode 数组的字典

如何使用swift在字典中添加多个参数[String,Dictionary]?