2014-11-03 34 views
0

我有三个视图控制器,它们使用分段控件在模态间切换。据我所知,用户在它们之间切换的越多,应用程序的内存就越多,因为它会一直添加新的视图而不会丢弃先前的视图。将分段控件切换到不同视图后关闭视图?

要解决这个问题,我尝试在我的切换方法的末尾添加dismissViewControllerAnimated:YES。这导致了一个警告 - “警告:在演示或解散正在进行时试图从视图控制器中解雇!”

任何想法如何做到这一点,使其功能类似于标签栏?

- (IBAction)switchTab:(id)sender { 

    UISegmentedControl *segControll = (UISegmentedControl *)sender; 
    if (segControll.selectedSegmentIndex==2) 
    { 

     [self performSegueWithIdentifier:@"segToSecondView" sender:keyValue]; 

    } 
    else if (segControll.selectedSegmentIndex==0) 
    { 
     [self performSegueWithIdentifier:@"segToThirdView" sender:keyValue]; 
    } 
    [self dismissViewControllerAnimated:YES completion:nil]; 

} 

回答

0

解决方案:不要使用模态演示。创建您自己的自定义容器视图控制器,并使用方法 transitionFromViewController:toViewController:duration:options:animations:completion: 在子视图控制器之间切换。

你应该可以使用容器视图控制器和嵌入式segue来连接你的“根”视图控制器(第一个视图控制器显示为一个子视图),然后使用上述方法切换到不同的子视图。

你会使容器视图比屏幕略小,所以父视图控制器有空间来显示它的分段控制。

+0

你知道任何教程或例子进一步证明这一点吗?这听起来像我应该一直在做的事情。 – user1145643 2014-11-03 22:45:51

0

如果您想要使用分段控件在控制器之间移动,您需要使用与问题中所用内容不同的逻辑。如果您选择的索引大于当前所在的索引,则您需要展示视图控制器,如果您要访问的索引小于当前索引,则应该废除或使用展开式索引。如果你需要返回多个控制器,那么使用unwind segue可能是最好的选择。