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

Ios 将视图推到选项卡控制器中的viewcontroller上,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,因此,我尝试将单个视图应用程序转换为选项卡式应用程序。我的使用案例是这样的——在其中一个视图控制器中,我希望推送一个新的视图控制器,并且仍然在下面有选项卡 我现在正在做这个- [self.tabBarController setViewControllers:@[self.searchViewController, self.loginViewController]]; [self.searchViewController presentViewController:self.searc

因此,我尝试将单个视图应用程序转换为选项卡式应用程序。我的使用案例是这样的——在其中一个视图控制器中,我希望推送一个新的视图控制器,并且仍然在下面有选项卡

我现在正在做这个-

  [self.tabBarController setViewControllers:@[self.searchViewController, self.loginViewController]];
  [self.searchViewController presentViewController:self.searchViewController.detailController animated:YES completion:nil];
但是,这会使底部的选项卡消失


我该怎么办

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

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

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

如果我想向用户展示编辑相册详细信息的能力,例如重命名相册,这是一种完全不同的操作类型,我希望以模式(即从底部)展示这种视图

两者之间的主要区别在于你要去哪里,你在做什么。如果要显示的下一个视图是执行一个动作的某个视图,然后返回到原始视图,则从底部以模式呈现是常规的。如果你正在做一个潜在的导航,越来越深入到各个小节中,并且在各个小节之间来回穿梭,比如艺术家->专辑->歌曲等,那么你将想要从侧面推送视图,就像iOS中的默认音乐应用程序一样

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

#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;
}
结果如下:


希望有帮助

我非常感谢你对否决票的解释,我认为我是相当直截了当和彻底的。