在故事板中切换视图控制器

时间:2014-08-28 07:32:37

标签: ios objective-c uiviewcontroller storyboard segue

作为过去常常使用单独的xib的人,我认为我可以使用故事板,因为它看起来使用起来更简单,更容易开发。我一直在编写一个应用程序,其基本设置如下:

最重要的是UINavigationController(第一级)。然后我有多个UIViewControllers(第二级),里面有按钮,你可以点击它们在第二级UIViewControllers之间切换。

但是当我开始在第二级UIViewControllers之间切换时会出现问题。我首先想到这是NSMutableArrays的初始化问题,因为在我的代码中我有一个NSTimer设置为定期循环,当我在其中设置断点时发现,当我前进到下一个计时器tick事件时,似乎有不同的实例相同的NSMutableArrays和尝试将新值插入到这些数组中似乎是一种赌博,有时它可以工作,有时不工作(因为它可能会或可能不会插入到正确的实例中)。

然后,查看Debug Navigator下的内存使用情况,我发现了这个问题。 每次我"切换" UIViewControllers之间正在启动一个新的UIViewController以及所有新变量。

我用来在它们之间切换的代码是

-(void) perform {
[[[self sourceViewController] navigationController] pushViewController:[self destinationViewController] animated:NO];    
}

或者基本上是推送segue过渡。这也解释了为什么当我试图切换回我的视图时,该视图上的数据丢失了,因为它是一个全新的视图。

有没有人知道如何在多个UIViewControllers之间切换(比如5),就像UITabViewController一样,除非没有标签栏?

2 个答案:

答案 0 :(得分:1)

您可以执行此操作的第一个选项:您可以使用tabbarcontroller切换viewcontroller并隐藏tabbar。然后在buttonclick上设置tabbar索引。

第二个选项你可以这样做:创建一个以上的视图控制器,在这个viewcontroller子视图中,所有切换viewController,当你想切换viewcontroller时,只需通过委托将该视图控制器视图放到前面。

答案 1 :(得分:0)

您是否需要导航栏和顶级导航控制器提供的其他功能?

如果没有,您可以使用UIPageViewController代替 您设置了所有二级视图控制器,然后只需告诉页面视图控制器显示哪一个。

如果你实现了相关的委托方法,它会自动提供滑动手势以在它们之间切换,并提供漂亮的动画以使它们在屏幕上和屏幕外显示。
您还可以在底部放置UIPageControl,为每个VC显示一个点,并突出显示当前VC的点。