使用UISegmentedControl在多个UIViewControllers之间进行切换

3

我查看了几个关于此主题的SO问题,发现很难找到正确的解决方案。

要求

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

问题

现在所有关于此主题的SO问题和答案都显示如何在视图之间切换。但是,我需要切换到的视图允许将另一个视图推入导航堆栈。我不确定这是否可能。我考虑过UIViewController容器 - 但是那会显示将视图推入较小窗口的堆栈,而不是屏幕范围内的内容。这不是我想要的。

有什么想法可以使用storyboards和UIViewControllers解决这个问题吗?

更新

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

enter image description here


当您单击UISegmentedControl按钮之一时,您应该只需对UINavigationController执行pushViewController即可创建导航堆栈。这样做不起作用吗? - LyricalPanda
@LyricalPanda 不完全正确。灰色区域需要显示三个不同的UIVIewControllers。(UISegmented控件有两个段 - 仅用于演示目的)- 选择其中任何一个段将会将灰色区域中的视图切换到另一个视图控制器。(这是我卡住的第一部分)我担心的第二部分是当用户在灰色区域中点击UItableView单元格时,将新的视图控制器推入堆栈。我希望新的视图控制器是全屏的,而不是调整大小(但现在我正在尝试解决我的第一个问题)- 我希望这能澄清一下? - Robert J. Clegg
是的!抱歉我花了这么长时间才理解问题。你每个视图的逻辑是否截然不同?尽管你正在寻找使用UIViewControllers的解决方案,但我知道可以通过创建默认情况下隐藏的自定义UIView来解决这个问题,并在选择按钮时显示它们。如果你没有完全独立的逻辑,这可能是一个可行的方法。 - LyricalPanda
没问题,抱歉表述不清。我考虑过那种方法。每个VC的逻辑都会有所不同。我本可以把所有内容放到一个VC中并使用xib文件。但是这将成为一个臃肿的VC类,因为代码量很大。我真的想将它拆分以便更易于维护/调试等。我不确定还有什么其他方法来解决这个问题。我的应用程序经常使用这种UI设计,因此我想找到一个好的解决方案,并重复使用它——因此我寻找可扩展性——这就是为什么我寻找容器视图的原因。感谢您的帮助! - Robert J. Clegg
@LyricalPanda,你能把你最后的评论标记为答案吗?我决定采取这种方法作为最简单的前进方式,并且会尽可能使代码整洁、易读和分离得好。看起来这是最好的解决方案。谢谢。 - Robert J. Clegg
显示剩余2条评论
2个回答

1
即使这里没有使用单独的TableViewControllers,您仍然可以使用不同的自定义UIViews,它们默认情况下是隐藏的,并在选择相应按钮时变为可见。这将不幸地使得所有三个视图的逻辑都在同一个VC中。
为了解决这个问题,您可以尝试设置一些委托并模拟TableViewController逻辑分离,通过将didSelectTableAtIndexPathUIGesture触摸等发送到ViewController之外的类中,以帮助保持代码更清晰。

由于所有三个视图的大部分逻辑都只是简单的表格视图,因此代码不会太乱。感谢您的好建议。 - Robert J. Clegg

0

使用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 必须保持可见。谢谢你的帮助。 - Robert J. Clegg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接