【问题标题】:Switching between UIViewControllers in story board在情节提要中的 ViewController 之间切换
【发布时间】:2014-08-28 07:32:37
【问题描述】:

作为过去通常使用单独的 xib 的人,我想我应该尝试一下故事板,因为它似乎更易于使用且更易于开发。我一直在编写一个应用程序,其中基本设置是这样的:

最重要的是 UINavigationController(第一级)。然后我有多个带有按钮的 UIViewControllers(第二级),您可以点击这些按钮在第二级 UIViewControllers 之间切换。

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

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

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

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

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

有谁知道如何在这些 UIViewController 中的多个(比如 5 个)之间切换,基本上就像 UITabViewController 一样,除了没有标签栏吗?

【问题讨论】:

  • 当你在 NavigationController 中推送一个 VC 时,VC 会初始化,所以它对应的所有视图也会初始化。还有你的问题不清楚,说清楚。

标签: ios objective-c uiviewcontroller storyboard segue


【解决方案1】:

您可以这样做的第一个选项:您可以使用 tabbarcontroller 来切换 viewcontroller 并隐藏 tabbar。然后在 buttonclick 上设置标签栏索引。

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

【讨论】:

  • 您能否简要解释一下我如何实现第一个选项?在故事板中实现是否容易?
  • 是的,很简单,只需在标签栏控制器中添加视图控制器,然后添加这一行 [self.tabBarController setSelectedIndex:index];
  • 最终使用了这个。我遇到的唯一问题是,除非我将 Simulated metrics bottom bar 指定为 None 并将标签栏控制器的 alpha 设置为 0.5 并将其设置为 not用户可交互并检查隐藏。
  • 使用这个 [self.tabbarcontroller.tabbar setHidden:YES];
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 2020-04-17
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2019-12-05
    • 2017-08-03
    相关资源
    最近更新 更多