【问题标题】:Switching between UIViewControllers with UISegmentedControl使用 UISegmentedControl 在 UIViewController 之间切换
【发布时间】:2014-08-22 01:40:35
【问题描述】:

是的,我已经查看了一些关于该主题的 SO 问题,但我发现这里很难提出正确的解决方案。

要求

我有一个基于 UITabBar 的应用程序。其中一个选项卡有一个UINavigation 控制器,顶部有UISegmentedControl,允许用户在三个不同的视图之间切换。 每个视图都有一个 UITableView,它允许用户导航到另一个视图。这些视图应该被推送到导航控制器。

问题

现在所有关于该主题的 SO 问题和答案都显示了如何在视图之间切换。但是,我需要切换到的视图,以允许将另一个视图推送到导航堆栈上。我不确定这是否可能。我想到了 UIViewController 的包含——但是这会显示一个视图被推送到屏幕边界的较小窗口中的堆栈上。不是我要找的。

有什么想法可以用故事板和 UIViewControllers 解决这个问题吗?

更新

这是我想要做的:在屏幕截图中,容器区域是我需要加载其他视图控制器的地方。 UISegment 控件无法进入导航栏,因为该空间用于其他用途。所以这就是为什么我认为 UIViewController 包含在这里可能会更好?

【问题讨论】:

  • 当您单击 UISegmentedControl 按钮之一时,您应该能够在您的 UINavigationController 上执行 pushViewController 以创建导航堆栈。那不行吗?
  • 感谢您的帮助。推动部分不是我卡住的地方。请参阅我的问题中的更新。 :) 我相信一旦我到达那里,推送就会起作用。
  • 哦,很有趣 - 所以你想要在那个灰色区域内有一个导航堆栈,类似于 UIWebView 的功能?
  • @LyricalPanda 不完全是。灰色区域需要显示三个不同的 UIVIewController。 (UISegmented 控件有两个段 - 仅用于演示目的) - 选择其中任何一个段都会将灰色区域中的视图切换到不同的视图控制器。 (这是我坚持的第一点)我担心的第二点是当用户点击灰色区域中的 UItableView 单元格时,将新的视图控制器推入堆栈。我希望新的视图控制器是全屏的而不是调整大小(但我现在正在尝试解决我的第一个问题) - 我希望这能解决它?
  • 是的!抱歉,我花了这么长时间才理解这个问题。您对每种观点的逻辑是否截然不同?即使您正在寻找使用 UIViewControllers 的解决方案,我知道这可以通过创建默认隐藏的自定义 UIViews 并在您选择按钮时显示它们来解决。如果您没有完全独立的逻辑,这可能是一种方法。

标签: ios objective-c uiviewcontroller uisegmentedcontrol


【解决方案1】:

用户UITabBarController并隐藏标签栏。

- (void)viewDidLoad
{
     self.tabBar.hidden = YES;
}

valueChanged方法绑定段控件

- (void)valueChanged:(UISegmentedControl *)seg
{
    if ([seg.selectedSegmentIndex == 0]) {
        self.selectedIndex = 0;
    } else if ([seg.selectedSegmentIndex == 1] {
        self.selectedIndex = 1;
    }
}

我通过这种方式实现了这一点,我希望这会有所帮助。

【讨论】:

  • 这不是我需要的。 UITabBar 必须保持可见。不过感谢您的帮助。
【解决方案2】:

因此,即使这没有使用单独的TableViewControllers,您也可以使用默认隐藏的不同自定义UIViews,并在您选择相应按钮时变为可见。不幸的是,这会让你在同一个 VC 中拥有所有三个视图的逻辑。

为了解决这个问题,您可以尝试设置一些委托并模仿TableViewController 逻辑分离,方法是将didSelectTableAtIndexPathUIGesture 触摸等发送到ViewController 之外的类中,以帮助保持代码更简洁.

【讨论】:

  • 由于所有三个视图的大部分逻辑都是简单的表视图,因此代码不会太乱。谢谢你的好建议。
猜你喜欢
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
相关资源
最近更新 更多