Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift iOS应用程序-静态分配表属性并动态更改行_Ios_Swift_Uitableview_Dynamic_Storyboard - Fatal编程技术网

Swift iOS应用程序-静态分配表属性并动态更改行

Swift iOS应用程序-静态分配表属性并动态更改行,ios,swift,uitableview,dynamic,storyboard,Ios,Swift,Uitableview,Dynamic,Storyboard,我对iOS编程非常陌生。我正在尝试开发一个表,它包含始终有2个部分(这是静态部分),但是标签需要能够动态地更改它们所在的部分。下面是一个例子: 第1节 项目名称1 项目名称2 项目名称3 第2节 项目名称4 项目名称5 项目名称6 在任何给定的时间(由我的代码决定),任何项目都可以实时从第1节切换到第2节,或者从第2节切换到第1节,也就是说,它们可以在用户查看表格时更改。这需要两个部分的大小都有明显的变化 不幸的是,我没有代码显示,因为我不太确定从哪里开始。我的故事板上只有一个UITab

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

第1节

  • 项目名称1
  • 项目名称2
  • 项目名称3
第2节

  • 项目名称4
  • 项目名称5
  • 项目名称6
在任何给定的时间(由我的代码决定),任何项目都可以实时从第1节切换到第2节,或者从第2节切换到第1节,也就是说,它们可以在用户查看表格时更改。这需要两个部分的大小都有明显的变化


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

苹果的文档是你在iOS编程方面最好的朋友!您可以使用numberOfSections()返回节数,在您的示例中,节数似乎是2。cellForRowAtIndexPath方法是在UITableView中实现魔术的地方。这里有一个indexPath变量,可用于定位数据并将其放置在所需位置。如果表视图的数据位于数组中,则可以使用[indexPath.row]或[indexPath.section]对其进行访问和排列。我知道这看起来很难理解,但最好的办法是进行实验。做同样的事情有很多方法,所以请阅读一些苹果的文档(你可以在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
}
这将返回多维数组中各个数组中的项数,由函数参数中提供的“section”定义

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

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各部分的快捷方式: 所以首先需要创建一个数组(这次可以是普通数组:)

然后使用此功能设置章节标题:

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

     return nil
}
override func tableView(tableView:UITableView,titleForHeaderInSection:Int)->String?{
如果节
现在我们可以只放:return sectionTitles[section],但是如果有一个我们没有标题的部分,应用程序就会崩溃,因此如果数组中没有该部分的标题,则其标题将为空


我希望我能帮助你

您应该为表视图设置
数据源
,并实现相关功能。谢谢!实际上,我刚刚想出了获取适当标签的[indexPath.row]方法,但我仍然有一个部分,而不是两个部分。忽略关于它们实时动态变化的部分,如何将每个标签放置在其自己的部分中?现在我的故事板显示我有一个部分;我是在故事板中添加第二部分,还是按编程方式添加?实际上,我还有一个问题还不清楚。有许多tableView()函数(除其他函数外)具有不同的参数。当数据更改时,是否会定期调用所有这些函数?或者他们一开始会接到一次电话?我不确定它们是如何被利用的。这些函数在tableView加载到视图时被调用。若要在数据更改等情况下再次调用它们,可以使用tableView.reloadData()并将其自身更新。再次感谢!
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
     if section < sectionTitles.count {
         return sectionTitles[section]
     }

     return nil
}