2012-04-03 58 views
1

我遇到了SplitViewController应用程序的问题。当我从主视图中的表中选择一行时,我将用替换segue替换详细视图。问题是每次发生这种情况时它会创建一个新实例/重新加载详细视图控制器。有没有什么办法可以拥有它,所以如果它已经被实例化,它将用先前的实例替换细节视图。我希望状态能够记住细节视图,例如输入到文本框中。替换segue创建新实例

+0

我刚刚开始与iPad故事板(包括拆分视图控制器)一起工作,但是没有可以使用替代替代的Push segue吗?或者框架在这种情况下不允许Push?这适用于iPhone的成语。 – Rob 2012-04-03 19:14:21

+1

我试图推动,但决定我不想要后退导航。我记得每次都会创建一个新的实例。我有种解决它通过将每个细节ViewController声明为主ViewController上的一个属性并在第一个segue上实例化它们。然后我不调用performSegue,而是手动推送/弹出实例到细节视图。 – 2012-04-03 22:42:40

+0

我也想知道如何使用替换segues。替代塞格和推塞格之间有什么区别?如果替换的视图控制器保留在内存中,那么它如何被恢复? – Matt 2013-03-14 03:21:35

回答

2

无法完成。一个SEGUE总是会创建一个视图控制器

1

我用的是替代SEGUE,但在MasterVC我实现

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 

    if ([identifier isEqualToString:@"showCalculatorViewController"]) { 

     if (self.splitViewController) { 

      NSObject *currentDetail = [self.splitViewController.viewControllers lastObject]; 

      if ([currentDetail isKindOfClass:[RootCalcViewController class]]) { 

.... 

然后我填写现有VC的新特性,并返回NO。

但是我没有UINAvigationController作为我的初始Detail View控制器,因为我处理的是masterVCs的导航。

此外,在AppDelegate中,didFinishLaunchingWithOptions需要设置正确的细节VC。生成的代码假定它是一个UINavigationController。同样在生成的MasterViewController中,viewDidLoad。这将为您节省一些应用程序崩溃,如果你替换细节UINAvigationController。

当我加载不同的视图控制器时,我让“Replace segues”替换它们。

0

或者 - 你可以让你的DetailController实现Singleton模式并将任何调用转发给+ new,+ alloc或类似的东西给你的单例方法。