我想知道当应用程序切换到模态并返回同一页面时,如何保留文本字段输入数据?
场景:我有一个带有文本字段和按钮的注册页面,其中一个按钮位于视图控制器上,表示为模态。在模态内部有一个tableview,当用户单击单元格时,它返回数据,并将用户返回到注册页面,但字段变空。
最好的方法是什么? 我想到的唯一解决方案是使用NSDefaults,不确定它是否是一个好方法。
澄清:
我通过添加普通的viewController在故事板中完成了模态。 然后我在Button和新的viewController之间连接了一个segue,并以模态方式选择了当前。
我为模态“ModalVC”指定了一个类,它有tableview数据源和委托函数。
然后我在表格单元格(ModalVC内部的一个)和注册页面之间创建了另一个segue来发回数据。
感谢
答案 0 :(得分:4)
使用NSUserDefaults
可以在这种情况下工作。你必须做几件事:
NSUserDefaults
实例title
,请检查字符串是否存储在title
的默认值中(使用defaults.valueForKey("key")
)nil
,则在defaults.setValue(value, forKey: "field name")
函数内使用prepareForSegue
(换句话说,在模态视图出现之前)将值存储在每个字段中nil
,则在默认值nil
希望这会有所帮助:)
答案 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")
享受!