我无法隐藏我为整个应用定义为UITabBarController
的{{1}}。
我试图在显示的第一个视图中隐藏UITabBarController(它是整个应用程序的根视图控制器)。我们的想法是第一个视图有rootViewController
个实例,它们跳转到定义的UIImageView
(它们也被定义为根UITabBarController的视图控制器)。
有没有办法让第一个视图控制器没有根UITabBarController,但是为定义为viewControllers的所有其他视图保留它?
这里的UIViewController
中的代码定义了视图控制器,UITabBarController定义为rootViewController。
AppDelegate
先谢谢你的帮助: - )。
答案 0 :(得分:1)
我认为解决这个问题的最佳方法是使用带有图标的vc开始。然后,当用户进行选择时,创建标签栏vc并使其成为根。
创建一个视图控制器(不仅仅是一个视图)来显示图标并获取用户选择。在启动时使窗口的根目录......
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// don't do this
//[self initViewControllers];
// or this
//[window setRootViewController:tabBarController];
// instead do this, create the vc that lets user select an icon
// put your icon view in there
IconSelectVC *iconSelectVC = [[IconSelectVC alloc] init];
[window setRootViewController:iconSelectVC];
[window makeKeyAndVisible];
return YES;
}
将initViewControllers
方法添加到app delegate的公共接口,以便可以从IconSelectVC调用它。然后添加最后一行,使其替换窗口的根vc。
// ... the rest of initViewControllers, then
[tabBarController setSelectedViewController:anIdeaVC];
[tabBarController setDelegate:self];
[window setRootViewController:tabBarController];
}
现在,当您决定更改UI时,在IconSelectVC中,获取应用委托单例并更改窗口的根目录。
// in IconSelectVC.m
// when you decide to change to the tab bar.
// Be aware that this vc will be released here, so do any cleaning you need to do here
// e.g. unsubscribe from NSNotifications, clean any timers, finish any asynch requests, etc.
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate initViewControllers];
编辑 - 我们没有讨论这种过渡应该如何看待 - 我的建议在这里会导致一个“丑陋”的转变(当然是在旁观者眼中),其中UI只在一帧中发生变化。获得更好转换的一种方法(少数几种)将是使用os7自定义vc转换。