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

时间:2016-08-04 01:13:44

标签: ios swift swift2

我想知道当应用程序切换到模态并返回同一页面时,如何保留文本字段输入数据?

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

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

澄清:

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

我为模态“ModalVC”指定了一个类,它有tableview数据源和委托函数。

然后我在表格单元格(ModalVC内部的一个)和注册页面之间创建了另一个segue来发回数据。

感谢

2 个答案:

答案 0 :(得分:4)

使用NSUserDefaults可以在这种情况下工作。你必须做几件事:

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

    希望这会有所帮助:)

答案 1 :(得分:1)

对于可能偶然发现这个问题的未来读者,尽管迈克施密特先生上面的回答肯定会有效,但是当你有太多的文本字段存储在默认值中时,处理太复杂,因此检查,存储太多和重置,这将使应用程序逻辑如此繁琐和噩梦跟踪。

我建议您执行以下解决方案:

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

1-在故事板中按住Ctrl键并从registrationvc拖动到modalvc,然后选择“作为模态显示” segue

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

  • 实例化默认值如下:

    let defaults = NSUserDefaults.standardUserDefaults()
    

      在使用您的数据填充TableView之后,将选定的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执行segue到registrationvc只需执行 dismissViewControllerAnimated =>这只会在没有重置TextFields的情况下解除modalvc,

注意上面代码中的行:

self.dismissViewControllerAnimated(true, completion: nil)

4-现在返回你的registrationvc检查是否存在默认值:

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

        print(SelectedValue)

        data.append(SelectedValue)
    }

5-当用户单击提交按钮时,忘记重置默认值,如果有,则取消按钮。

        defaults.removeObjectForKey("SelectedValueKey")

享受!