保持模态UIViewController状态的最佳方法是什么?

时间:2015-02-25 23:06:11

标签: ios swift

我很难在一个标题中总结我的问题,所以我会在这里尝试清楚。

我有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,它会根据当然的行显示信息。

实际上,我想保存此控制器的状态仅用于当前应用程序的执行。无需坚持国家

4 个答案:

答案 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)

有很多方法可以做到这一点:

  1. 委托模式。您可以让VC1实现VC2Delegate协议,该协议基本上充当回调
  2. 您可以在VC1上设置VC2上的块属性,以便在增强segmentedControl时执行一些操作来更改VC1的状态。
  3. 正如提到的其他一些答案,您可以设置一些数据模型,如核心数据或NSUserDefaults
  4. 您可以使用NSNotifications。根据我的经验,其他工程师很难理解正在发生的事情。

答案 3 :(得分:0)

正如其他人所指出的,有几种方法可以做到这一点。另一种方法是保持VC2存活,而不是在解除它时将其解除分配。你可以通过在VC1中为它创建一个属性来实现这一点,并且只在你第一次出现它时才实例化VC2;你必须在代码中呈现它,而不是使用segue,因为segue总是实例化新的控制器。