从 swift 中的模态返回后如何保留文本字段值?

How to keep text fields values after returning from modal in swift?

我想知道当应用程序转至模态并 return 转至同一页面时,如何保留文本字段输入数据?

场景:我有一个带有文本字段和按钮的注册页面,其中一个按钮连接到表示为模态的视图控制器。模态内部有一个 table 视图,当用户单击它的单元格时 returns 数据,并将用户发送回注册页面,但字段为空。

最好的方法是什么? 我想到的唯一解决方案是使用 NSDefaults,不确定它是否是一个好方法。

澄清:

我通过添加一个普通的 viewController 在故事板中完成了模态。 然后我在 Button 和新的 viewController 之间连接了一个 segue,并选择了 present modally。

我为模式 "ModalVC" 指定了一个 class,它具有 table 查看数据源和委托函数。

然后我在 table 单元格(ModalVC 中的单元格)与注册页面之间创建了另一个 segue 以发送回数据。

谢谢

在这种情况下使用 NSUserDefaults 会奏效。你必须做几件事:

  1. 实例化一个NSUserDefaults实例
  2. 当您第一次打开注册页面时,对于每个文本字段 title,检查是否有字符串存储在 title 的默认值中(使用 defaults.valueForKey("key")
  3. 如果是nil,则在prepareForSegue函数中使用defaults.setValue(value, forKey: "field name")存储每个字段中的值(换句话说,就在模态视图出现之前)
  4. 如果不是nil,则加载默认
  5. 中每个字段存储的值
  6. 注册完成后,将默认设置重置为nil

希望这对您有所帮助:)

对于可能偶然发现这个问题的未来读者,虽然上面的 Mr.Mike Schmidt 答案肯定有效,但是当你有太多文本字段要存储在默认值中时,处理起来会太复杂,因此也许多检查、存储和重置,这将使应用程序逻辑变得非常乏味和难以跟踪。

我建议您按照我所做的以下解决方案:

(供参考:我的 Modalvc 是一个显示项目列表的 TableView

1- 在情节提要中,按住 Ctrl 键从 registrationvc 拖动到 modalvc,然后 select "present as modal" segue

2- modalvc 值存储到默认值 中,而不是将文本字段值存储到默认值中(因为它只有一个值,您将以一个默认值结束)像这样:

  • 像这样实例化默认值:

    let defaults = NSUserDefaults.standardUserDefaults()
    
    • 用您的数据填充 TableView 后,将 selected tableview 单元格数据存储在默认值中,如下所示:

      func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
      
         let cell = MyTable.cellForRowAtIndexPath(indexPath)
      
         let MyValue = cell?.textLabel?.text
      
         defaults.setObject(MyValue, forKey: "SelectedValueKey")
      
          //this line will make your life easy
         self.dismissViewControllerAnimated(true, completion: nil)
      }
      

3- 这是重要的部分,而不是从 TableViewCell 到 registrationvc 的 segue 只是简单地做一个 dismissViewControllerAnimated => 这将只需关闭 modalvc 而不重置 TextFields,

注意上面代码中的一行:

self.dismissViewControllerAnimated(true, completion: nil)

4- 现在回到您的注册vc 检查是否存在默认值:

if defaults.valueForKey("SelectedValueKey") != nil{
        let SelectedValue = (defaults.objectForKey("SelectedValueKey") as? String)!

        print(SelectedValue)

        data.append(SelectedValue)
    }

5- 当用户点击提交按钮时不要忘记重置默认值,或者如果您有取消按钮,请忘记重置默认值。

        defaults.removeObjectForKey("SelectedValueKey")

尽情享受吧!