我很难在一个标题中总结我的问题,所以我会在这里尝试清楚。
我有UIViewController
(vc1)通过segue将我链接到另一个UIViewController
(vc2)。
在vc2中,我可以选择一段UISegmentedControl
。
要返回vc1,我只需按UIButton
所做的返回@IBAction
:
@IBAction func returnToMainView(sender: AnyObject) {
self.dismissViewControllerAnimated(true, completion: nil)
}
我希望当我再次回到vc2时,我第一次选择的片段再次被选中。
我的解决方案是什么?
我应该继续使用dismissViewControllerAnimated
方法并使用委托方法来保存选择的索引段。然后当我回到vc2时,在segue中传递选定的索引段,要求vc2?
或者有更好的方法来保持我的vc2的状态而不是dismissViewControllerAnimated
吗?
希望我已经足够清楚了。
更新:
以下是有关我案例的更多信息。
在vc1中,我有一个UITableView。在每一行我都可以调用我的vc2,它会根据当然的行显示信息。
实际上,我想保存此控制器的状态仅用于当前应用程序的执行。无需坚持国家
答案 0 :(得分:1)
我正在使用NSUserDefaults
。所以如果我打开另一个ViewController,我会在需要的地方保存我的UIViews的所有重要设置。
在您的示例中,在关闭ModalViewController之前,您可以保存例如UISegmentedControl
的状态:
NSUserDefaults.standardUserDefaults().setInteger(segmentedControl.selectedSegmentIndex, forKey: "yourSwitch")
然后,在ModalViewController的viewWillApear
方法中,调用NSUserDefaults
并加载所有设置:
var selectedIndex = NSUserDefaults.standardUserDefaults().integerForKey("yourSwitch")
在viewDidAppear
方法中,您调用值:
segmendedControl.selectedSegmentIndex = selectedIndex
答案 1 :(得分:0)
IMO如果它只是一个你想要保留的segmented_control索引,将它的索引保存在你以前的viewController中,并在你通过prepareForSegue:
方法呈现它时随时传递它。任何其他事情都是过度的。
答案 2 :(得分:0)
有很多方法可以做到这一点:
VC2Delegate
协议,该协议基本上充当回调NSUserDefaults
。 答案 3 :(得分:0)
正如其他人所指出的,有几种方法可以做到这一点。另一种方法是保持VC2存活,而不是在解除它时将其解除分配。你可以通过在VC1中为它创建一个属性来实现这一点,并且只在你第一次出现它时才实例化VC2;你必须在代码中呈现它,而不是使用segue,因为segue总是实例化新的控制器。