具有多个部分的TableView的Swift NSUserDefault?

时间:2015-07-23 13:53:16

标签: ios swift uitableview nsuserdefaults

我目前正在做一个Xcode项目(SWIFT),我有一些与NSUserdefault和prepareforsegue有关的问题。

我有2个TableView。 TableView1有2个部分:section1和section2。这是我想要的:

  • 当我单击TableView1中section1中的随机行时,TableView2会显示我想要的部分数。 (例如:我单击第1行,然后TableView2显示3个部分,我单击第2行,然后TableView2显示4个部分,当我单击不同的行时,TableView2中显示的部分数量必须不同)
  • 与TableView1

    中的section2相同

    我使用2个数组的数组在TableView1中显示2个部分。

很抱歉,如果这个问题很愚蠢,我是编程的新手,所以我希望你们能告诉我如何做这个项目。我很感激:)

1 个答案:

答案 0 :(得分:0)

<强>背景

为了使这个答案更清楚,我假设你有两个视图控制器,Table1ViewControllerTable2ViewController,它们显示Table1Table2。我假设您知道如何在Interface Builder中连接两个视图控制器,以便您可以单击Table1并显示Table2ViewController。正如您在问题中所描述的那样,当用户点击Table1中确定Table2中应该有多少部分的行时。我不会讨论与将Table1的行映射到Table2的多个部分相关的任何内容。

主要问题是如何将选定数量的部分发送到Table2ViewController

如您在问题中提到的那样,您可以使用NSUserDefaults来传达信息,但这不是用户默认设置的使用方式。 NSUserDefaults的文档说明默认系统允许应用程序自定义其行为以匹配用户的首选项。并提供以下示例:允许用户确定您的度量单位应用程序显示或文档自动保存的频率。而是设计应用程序以根据以前的用户选择进行操作。

因此,如果我们不打算使用NSUserDefaults,我们该如何解决这个问题呢?您还提到了UIViewController方法prepareForSeque:sender:。它的文档是: [s] ubclasses重写此方法并使用它在显示之前配置新的视图控制器

主要方法

这正是我们想要做的。在显示Table2ViewController之前,我们希望使用Table2应具有的部分数来配置它。因此,让我们向Table2ViewController添加一个属性,如下所示(注意哪里有&#34; ...&#34;在下面,我省略了一些代码):

class Table2ViewController: ... {
   var numberOfSections = 0

   func numberOfSectionsInTableView(tableView: UITableView) -> Int
   {
       return numberOfSections
   }

...
...
...

}

所以现在剩下要做的就是在用户点击Table1中的一行后,我们会确定Table2应该有多少个部分(我离开那个部分未指定)然后在显示Table2ViewController之前,我们需要配置numberOfSections。我们在prepareForSegue电话中这样做了。以下内容应该有效:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
  if let selectedIndexPath = tableView.indexPathForSelectedRow() {
    var destinationVC = segue.destinationViewController as! Table2ViewController
    destinationVC.nummberOfSections = self.numberOfSectionsFor(selectedIndexPath)
  }
}

所以我们首先确定了所选行的索引路径。然后我们将segue.destinationViewController转换为Table2ViewController,以便我们可以访问其属性。最后,我们使用numberOfSections上的某个方法设置了Table1ViewController属性。