Swift iOS 应用程序 - 静态分配具有动态变化行的表属性

Posted

技术标签:

【中文标题】Swift iOS 应用程序 - 静态分配具有动态变化行的表属性【英文标题】:Swift iOS app - statically assigning table properties with dynamically changing rows 【发布时间】:2015-08-03 15:43:27 【问题描述】:

我对 ios 编程非常陌生。我正在尝试开发一个始终有 2 个部分的表格(这是静态部分),但标签需要能够动态更改它们所在的部分。这是一个例子:

第 1 节

项目名称 1 项目名称2 项目名称 3

第 2 节

项目名称 4 项目名称 5 项目名称6

在任何给定时间(由我的代码决定),任何项目都可以实时从第 1 部分和第 2 部分切换,反之亦然,即它们可以在用户查看表格时更改。这将需要对两个部分的大小进行明显的更改。

很遗憾,我没有要显示的代码,因为我不太确定从哪里开始。我的故事板中只有一个 UITableView。我将“内容”属性设置为动态原型,但我希望部分的数量是静态的,但我找不到指定的方法。我查看了文档,发现 numberOfSections(),它只返回节数。以前有人做过类似的事情吗?谢谢。

【问题讨论】:

你应该为表格视图设置datasource,并实现相关的UITableViewDataSource methods。 【参考方案1】:

Apple 的文档是您在 iOS 编程中最好的朋友!您可以使用 numberOfSections() 返回在您的情况下似乎为 2 的部分数。 cellForRowAtIndexPath 方法是 UITableView 中发生魔法的地方。在这里,您有 indexPath 变量,您可以使用它来定位数据并将其放置在您想要的位置。如果表格视图的数据在数组中,您可以使用 [indexPath.row] 或 [indexPath.section] 访问和排列它。我知道这似乎非常困难和令人困惑,但弄清楚如何做到这一点的最好方法是进行实验。有很多方法可以做同样的事情,所以请阅读一些 Apple 的文档(你可以在 Xcode 中找到这个,查看来自 YouTube、这个网站等的一些示例代码,并进行实验!祝你好运:)

更新: 好的,这就是你如何做到这一点。随意改变你认为合适的东西:)

设置单元格数据

好的,所以能够动态更改数据的最佳方法是使用多维数组(别担心,使用起来相当容易!) 例如:

var tableData = [["1st sec1", "first sec2"], ["2nd sec1", "2nd sec2"]]

要指定表格视图中的部分数量,您可以使用:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int 
     return tableData.count

这将返回我们多维数组中的数组数量,在这种情况下有两个。

那么要指定每个部分的行数,请使用:

override func tableView(tableView: UITableView, numberOfRowsInSectionsection: Int) -> Int 
     return tableData[section].count

这将返回我们多维数组中各个数组中的项目数,由函数参数中提供的“部分”定义。

现在,我不完全确定您将决定何时将数据从代码中的一个部分移动到另一个部分,但无论您决定这样做,您都可以使用它在多维数组中移动数据:

var dataToMove = tableData[0][1]
// in this example, dataToMove will have a value of "first sec2"
tableData[0].removeAtIndex(1)
// this will remove "first sec2" from the array
tableData[1].append(dataToMove)
// this will place "first sec2" into the second section of the array

好的,一旦你完成了困难的部分,你就可以自定义单元格了:

// put this code in cellForRowAtIndexPath:
let cellTitle = tableData[indexPath.section][indexPath.row]
// after this, just set the title of the cell to the cellTitle variable, and you're set!

命名 TableView 部分

这是命名 TableView 部分的快速而肮脏的方法: 所以首先你需要制作一个数组(这次可以是一个普通的:))

let sectionTitles = ["First Section", "Second Section"]

然后使用这个函数来设置章节标题:

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? 
     if section < sectionTitles.count 
         return sectionTitles[section]
     

     return nil

现在我们可以只输入:return sectionTitles[section],但是如果有一个我们没有标题的部分,应用程序就会崩溃,所以如果没有标题的部分数组,它的标题将为空。

希望能帮到你!!

【讨论】:

谢谢!实际上,我只是想出了获取适当标签的 [indexPath.row] 方法,但我仍然有一个部分而不是两个部分。忽略它们实时动态变化的部分,如何将每个标签放在自己的部分中?现在我的故事板显示我有一个部分;我应该在情节提要中添加第二部分还是以编程方式添加? 我实际上还有一个问题我还不清楚。有一堆这样的 tableView() 函数(以及其他函数)有不同的参数,什么没有。所有这些函数都会随着数据的变化而定期调用吗?还是他们一开始就被叫过一次?我不确定它们是如何被准确利用的。 这些函数在 tableView 加载到视图时被调用。要在数据更改等时再次调用它们,您可以使用 tableView.reloadData() 它会自行更新 知道了。再次感谢!

以上是关于Swift iOS 应用程序 - 静态分配具有动态变化行的表属性的主要内容,如果未能解决你的问题,请参考以下文章

Flutter iOS OC 混编 Swift 遭遇动态库和静态库问题填坑

变量的生存期和存储分配

iOS XCode7制作.Framework动态库和.a静态库的总结

具有大小动态分配和预定大小的简单数组内存分配

iOS程序中的内存分配 栈区堆区全局区(转)

动态内存分配与静态内存分配