将视图推送到选项卡控制器中的viewcontroller

时间:2014-01-15 23:22:56

标签: ios objective-c cocoa-touch

所以我正在尝试将单个视图应用程序转换为选项卡式应用程序。我的用例就是这个 - 在一个视图控制器中我想推送一个新的视图控制器并且仍然有下面的选项卡。

我目前正在这样做 -

  [self.tabBarController setViewControllers:@[self.searchViewController, self.loginViewController]];
  [self.searchViewController presentViewController:self.searchViewController.detailController animated:YES completion:nil];

但是,这会使底部的标签消失。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

presentViewController是一个“模态”演示文稿 - 呈现的视图控制器接管整个屏幕。如果要保留在选项卡中但在视图控制器之间移动,则选项卡中的根视图控制器应为UINavigationController。然后,您可以将视图控制器推送/弹出。

答案 1 :(得分:1)

视图导航有两种主要方法,第一种是显示从底部向上滑动的视图,第二种是显示从右侧滑入的视图的推动。

在大多数情况下,我要显示的视图以及启动导航的操作决定了我将使用哪种方法。例如,如果我有一个包含音乐专辑列表的表视图,并且我想要搜索特定艺术家的歌曲,要查看该专辑中的歌曲,我想推动视图控制器,即向右滑动。这使我能够通过导航栏上自动添加的后退按钮返回内置(直观)功能,以防我正在寻找的歌曲不在我选择的专辑中。

如果我想让用户能够编辑专辑详细信息,例如重命名专辑,这是一种完全不同的动作类型,我希望以模态方式呈现这样的视图,即从底部

两者之间的主要区别是你要去哪里以及你在做什么。如果您要展示的下一个视图是执行一个动作的东西,那么您将返回到原始视图,从底部呈现模态是常规的。如果您正在进行潜在的导航进一步进入子部分并且将在所述子部分之间来回传递,例如Artist-> Album-> Song等,您将要从侧面推动视图,就像iOS中的默认音乐应用程序一样。

这是我创建的示例初学者项目,演示了一种简单的方法,使您可以按照自己的方式工作。我创建了我想要包含在tabBarController中的不同视图控制器的实例,它们与选项卡相关联,然后使用自己的导航控制器将它们“换行”,然后通过.items属性将它们添加到tabBar。这样每个视图控制器都有自己的导航层次结构,每个视图控制器都可以调用[self.navigationController pushViewController:]或[self.navigationController presentViewController]来保持导视“在视图内”并与tabBar本身分开。

#import "AppDelegate.h"
#import "TabBarViewController.h"
#import "InfoViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];

    InfoViewController *firstVC = [[InfoViewController alloc] init];
    firstVC.title = @"First";
    firstVC.view.backgroundColor = [UIColor redColor];
    UINavigationController *firstNC = [[UINavigationController alloc] initWithRootViewController:firstVC];

    InfoViewController *secondVC = [[InfoViewController alloc] init];
    secondVC.title = @"Second";
    secondVC.view.backgroundColor = [UIColor blueColor];
    UINavigationController *secondNC = [[UINavigationController alloc] initWithRootViewController:secondVC];

    TabBarViewController *tabBarVC = [[TabBarViewController alloc] init];
    tabBarVC.viewControllers = @[firstNC, secondNC];

    self.window.rootViewController = tabBarVC;

    [self.window makeKeyAndVisible];
    return YES;
}

结果如下:

enter image description here

enter image description here

希望有所帮助!