【问题标题】:Swift NSUserDefault for TableView with Multiple Sections?用于具有多个部分的 TableView 的 Swift NSUserDefault?
【发布时间】:2015-07-27 03:23:06
【问题描述】:

我目前正在做一个 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 个部分。

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

【问题讨论】:

  • 无需道歉——提问是你学习的方式。但是,您的问题缺少很多重要的细节:您没有描述您遇到的问题。你有代码吗?如果是这样,它在做什么?此外,尚不清楚NSUserdefaultprepareforsegue 是如何参与的。我建议你阅读stackoverflow.com/help/how-to-ask
  • 谢谢。这不是问题,我只是不知道该怎么做。据我所知,要存储数据并将其从 tableview 传递到另一个 View,我必须使用 NSUserDefault 和 PrepareForSegue。我做了一个练习,我单击一个按钮,它将我在 Textfield 中编写的内容存储起来,并将其传递给另一个 ViewController 并显示在一个标签中。我做到了,而且运行良好。然后我想像上面总结的那样尝试更努力的练习。你不需要给我看具体的代码,只要告诉我我必须做的步骤,然后我会自己弄清楚代码。谢谢:)

标签: ios swift uitableview nsuserdefaults


【解决方案1】:

背景

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

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

正如您在问题中提到的那样,您可以使用NSUserDefaults 传达信息,但这不是用户默认值的使用方式。 NSUserDefaults 的文档说 默认系统允许应用程序自定义其行为以匹配用户的偏好。 并提供以下示例:允许用户确定应用程序显示的度量单位或自动保存文档的频率。 相反,您正在设计您的应用程序,使其行为基于先前的用户选择。

如果我们不打算使用NSUserDefaults,我们该怎么做呢?您还提到了UIViewController 方法prepareForSeque:sender:。它的文档是这样写的:[s]子类覆盖了这个方法,并在新的视图控制器被显示之前使用它来配置它

主要途径

这正是我们想要做的。在显示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 属性。

【讨论】:

  • 如果您发现有帮助并回答了您的问题的回复,请不要忘记接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 2019-08-18
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
相关资源
最近更新 更多