我目前正在做一个 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 个部分。
如果这个问题很愚蠢,我很抱歉,我是编程新手,所以我希望你们能告诉我如何做这个项目。我很感激:)
最佳答案
背景
为了使这个答案更清楚,我假设您有两个 View Controller ,Table1ViewController
和 Table2ViewController
,它们显示 Table1
和表 2
。我假设您知道如何在 Interface Builder 中连接两个 View Controller ,以便您可以单击 Table1
并显示 Table2ViewController
。正如您在问题中所描述的,当用户单击 Table1
中的一行时,该行决定了 Table2
中应该有多少个部分。我不会讨论与将 Table1
的行映射到 Table2
的节数相关的任何内容。
主要问题是如何将选定数量的部分发送到 Table2ViewController
。
正如您在问题中提到的那样,您可以使用 NSUserDefaults
来传达信息,但这不是用户默认值的用途。 NSUserDefaults
的文档说默认系统允许应用程序自定义其行为以匹配用户的偏好。并给出了以下示例:允许用户确定什么单位您的应用程序显示的测量值或文档自动保存的频率。您正在设计您的应用程序以根据先前的用户选择运行。
所以如果我们不打算使用 NSUserDefaults
,我们应该怎么做呢?您还提到了 UIViewController
方法 prepareForSeque:sender:
。它的文档是这样写的:[s]子类覆盖这个方法并在它被显示之前用它来配置新的 View Controller 。
主要方法
而这正是我们想要做的。在显示 Table2ViewController
之前,我们要为它配置 Table2
应具有的部分数。因此,让我们向 Table2ViewController
添加一个属性,如下所示(注意以下任何有“...”的地方,我省略了一些代码):
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
以便我们可以访问它的属性。最后,我们使用 Table1ViewController
上的一些方法设置它的 numberOfSections
属性。
关于ios - 具有多个部分的 TableView 的 Swift NSUserDefault?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31589472/