Swift:如何使ViewControllers保持完全相同的状态?

时间:2015-12-02 20:47:24

标签: xcode

我有两个视图控制器,在ViewController 1中我有一个日期选择器和一个文本字段。我有另一个ViewController,显示您在该日期选择器和文本字段中输入的内容。我有一个¨change¨按钮返回到第一个视图控制器和一个显示视图控制器的¨doen按钮。到目前为止,文本字段中的文本和用户选择的日期每次关闭时都会消失应用程序或单击“更改”按钮(返回“查看控制器1”)。

如何在文本字段中保留文本,并在日期选择器中保留所选日期。

我希望用户能够更改已添加的信息。

请添加代码。

http://imgur.com/PDzJrNJ(主要故事板的图片)

2 个答案:

答案 0 :(得分:1)

显示ViewControllers的方式不是最佳选择。在最好的情况下,当您显示新内容(class CustomUserDetails extends GrailsUser{ ... //internal profile CustomUserDetails(String username, String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<GrantedAuthority> authorities, Object id, Long partyId, String legalGivenNames, String legalFamilyName, String email, String ntPrincipal, String activeDirectoryGroup) { super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities, id) ... } ... } ),然后将其关闭时,它会引导您返回上一个屏幕(ViewController2)。它不应该实例化ViewController1的新实例,因为在你的情况下segues正在做。

请注意,根据您呈现第二个视图的方式,解决方案会有所不同。

如果您从第一个控制器到第二个控制器的segue是&#34; Show&#34; segue,您只需将以下内容添加到您的&#34;更改&#34;按钮:

ViewController1

如果您有导航控制器(我在屏幕截图中没有看到),那么您可以使用

@IBAction func changeButtonPressed(sender: AnyObject) {
  self.dismissViewControllerAnimated(true, completion: nil)
}

答案 1 :(得分:0)

您可以尝试执行的操作是在退出视图控制器之前保存数据。 在viewWillDisappear方法中,您可以添加

 NSUserDefaults.standardUserDefaults().setObject(textField.text, forKey: "userText")
 NSUserDefaults.standardUserDefaults().setObject(datePicker.date, forKey: "userDate")

稍后,当您重新打开相同的视图控制器时,在viewDidLoad方法中,您可以添加

if  NSUserDefaults.standardUserDefaults().objectForKey("userText") != nil {
    textField.text = NSUserDefaults.standardUserDefaults().objectForKey("userText") as! String
}

if  NSUserDefaults.standardUserDefaults().objectForKey("userDate") != nil {
    datePicker.setDate(NSUserDefaults.standardUserDefaults().objectForKey("userDate") as! NSDate, animated: true)
}

我不经常使用日期选择器,但我相信这是正确的代码。否则,它会非常相似。希望这会有所帮助。