我目前正在做一个Xcode项目(SWIFT),我有一些与NSUserdefault和prepareforsegue有关的问题。
我有2个TableView。 TableView1有2个部分:section1和section2。这是我想要的:
与TableView1
中的section2相同我使用2个数组的数组在TableView1中显示2个部分。
很抱歉,如果这个问题很愚蠢,我是编程的新手,所以我希望你们能告诉我如何做这个项目。我很感激:)
答案 0 :(得分:0)
<强>背景强>
为了使这个答案更清楚,我假设你有两个视图控制器,Table1ViewController
和Table2ViewController
,它们显示Table1
和Table2
。我假设您知道如何在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
属性。