Ios Swift-使用多维数组中的多个部分填充表视图

Ios Swift-使用多维数组中的多个部分填充表视图,ios,swift,uitableview,Ios,Swift,Uitableview,我是Swift的初学者,至少了解了如何填充UITableView的基本知识。我现在只能用字典中提供的数据填充多个部分 我有一个多维字典,可以将对象分配给类别: var categoryDict:[String:[AnyObject]]=[“类别A”:[“对象1”、“对象2”],“类别B”:[“对象3”] 现在我想填充我的TableView,以便它显示如下内容: override func tableView(tableView: UITableView, cellForRowAtInde

我是Swift的初学者,至少了解了如何填充UITableView的基本知识。我现在只能用字典中提供的数据填充多个部分

我有一个多维字典,可以将对象分配给类别:

var categoryDict:[String:[AnyObject]]=[“类别A”:[“对象1”、“对象2”],“类别B”:[“对象3”]
现在我想填充我的TableView,以便它显示如下内容:

override func tableView(tableView: UITableView, 
  cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{

    let cell = tableView.dequeueReusableCellWithIdentifier("BufferCell",
     forIndexPath: indexPath)
    let section = indexPath.section 
    let row = indexPath.row

    let categoryKey:String = categoryList[section]   
    let aCategoryEntry:[String] = categoryDict[categoryKey] as! [String]
    let anObject = aCategoryEntry[row] //
    let cell.textLabel.text = anObject
    return cell
}
  • A类

    • 对象1
    • 对象2
  • B类

    • 对象3
到目前为止,我已经能够创建一个类别数组来返回节数,并计算字典中存储的数组以获得每个特定类别中的行数。现在,我完全无法用节和行填充TableView。我该怎么做?多谢各位

到目前为止,我的代码是:

var分类列表:[String]=[String]()
变量categoryDict:[String:[AnyObject]]=[“类别A”:[“对象1”,“对象2”],“类别B”:[“对象3”]]
func getLists(){
categoryList=数组(categoryDict.keys)
分类列表sortInPlace(之前)
}
//排序数组
func-before(value1:String,value2:String)->Bool{
返回值1<值2;
}
func getNumberOfEntrysInSection(Section:Int)->Int{
let category:String=categoryList[Section]//获取categoryList中索引的类别
let value:[AnyObject]=categoryDict[category]!//获取此特定类别的值
让number=value.count
返回号码
}
//标记:-表视图数据源
重写func numberOfSectionsInTableView(tableView:UITableView)->Int{
getLists()
返回categoryList.count
}
重写func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
返回getNumberOfEntrysInSection(section)
}
重写函数tableView(tableView:UITableView,titleForHeaderInSection:Int)->String?{
返回类别列表[部分]
}
重写func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableView单元格{
让cell=tableView.dequeueReusableCellWithIdentifier(“BufferCell”,forIndexPath:indexPath)
???
返回单元
}

首先:字典是存储表视图内容的糟糕选择。字典本身就是无序的,所以你必须对键进行排序。如果您的数据超出了一小部分,那么排序过程将花费相当长的时间

如果你打算使用字典,你应该重构你的代码,这样你就可以保留排序过的键,并反复使用它们,除非字典改变。我会让您在字典中添加一个setter方法,并始终使用该setter来更改字典。setter方法将重新生成已排序的键。这样,如果字典发生变化,您只需对键进行排序。(但最好把字典全部扔掉。)

我建议创建一个
Section
对象,该对象包含一个sectionTitle
String
和一个
sectionEntries
数组。然后将表视图数据设置为截面对象数组

但是,既然您有一本字典,我将向您展示如何使代码工作

您需要有关
cellforrowatinexpath
方法的帮助。你就快到了。您只需要使用indexPath节和行在数据结构中获取适当的条目。大概是这样的:

override func tableView(tableView: UITableView, 
  cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{

    let cell = tableView.dequeueReusableCellWithIdentifier("BufferCell",
     forIndexPath: indexPath)
    let section = indexPath.section 
    let row = indexPath.row

    let categoryKey:String = categoryList[section]   
    let aCategoryEntry:[String] = categoryDict[categoryKey] as! [String]
    let anObject = aCategoryEntry[row] //
    let cell.textLabel.text = anObject
    return cell
}

您是否设置了委托和数据源?我认为您的思路是正确的。兄弟,你的问题是什么?我认为委托和数据源设置正确-我可以用一个部分填充一个表,但问题是多个部分:我找不到一个方法来说明“将第0节的标题设为特定索引处categoryList中的字符串,然后用categoryDict中为该特定类别提供的值填充该节中的单元格”。你知道我的意思吗?我读过的所有教程似乎都以不同的方式(我真的不明白)完成了此操作,但必须有一种方法来输入数据,因为我正在提供分类词典之外的数据?这正是我想要的-非常感谢!!我使用词典存储数据的原因很简单,就目前而言,我在某种程度上理解我在使用它们时所做的事情。效率和数据存储是我学习的下一步g-swift-to-do-list,但现在我很高兴我可以存储我的数据。再次感谢你!如果你自己编写了你在原始问题中发布的代码,那么你已经完成了90%的步骤。你在进入最后一步之前就失去了“大局”。