gpt4 book ai didi

ios - 禁用/隐藏一个 View Controller 的 Root View Controller

转载 作者:行者123 更新时间:2023-11-29 02:48:08 25 4
gpt4 key购买 nike

我在隐藏 UITabBarController 时遇到问题,我将其定义为整个应用程序的 rootViewController

我试图在显示的第一个 View 上隐藏 UITabBarController——它是整个应用程序的 Root View Controller 。这个想法是,第一个 View 具有跳转到定义的 UIViewController 的 UIImageView 实例(它们也被定义为根 UITabBarController 的 View Controller )。

有没有办法让第一个 View Controller 没有根 UITabBarController,但将其保留给定义为 viewController 的所有其他 View ?

这是 AppDelegate 中的代码,将 View Controller 和 UITabBarController 定义为 rootViewController。

- (void)initViewControllers {
anIdeaVC = [[IdeaViewController alloc] initWithNibName:@"IdeaViewController" bundle:nil];
[anIdeaVC setTabBarItem:[[[UITabBarItem alloc] initWithTitle:@"Idea" image:[UIImage imageNamed:@"iconIdee.png"] tag:0] autorelease]];

aListTableVC = [[ListTableViewController alloc] initWithStyle:UITableViewStylePlain];
[aListTableVC setTitle:@"List"];

aListNC = [[ListNavigationController alloc] initWithRootViewController:aListTableVC];
[aListNC setTabBarItem:[[[UITabBarItem alloc] initWithTitle:@"List" image:[UIImage imageNamed:@"iconList.png"] tag:0] autorelease]];

anInnMapVC = [[MapViewController alloc] initWithNibName:@"MapViewController" bundle:nil];

anInnMapNC = [[InnMapNavigationController alloc] initWithRootViewController:anInnMapVC];
[anInnMapNC setTabBarItem:[[[UITabBarItem alloc] initWithTitle:@"InnMap" image:[UIImage imageNamed:@"iconInnMap.png"] tag:0] autorelease]];

aSearchTableVC = [[SearchTableViewController alloc] initWithNibName:@"SearchTableViewController" bundle:nil];
[aSearchTableVC setTitle:@"Search"];

aSearchNC = [[SearchNavigationController alloc] initWithRootViewController:aSearchTableVC];
[aSearchNC setTabBarItem:[[[UITabBarItem alloc] initWithTitle:@"Search" image:[UIImage imageNamed:@"iconSearch.png"] tag:0] autorelease]];

tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:[NSArray arrayWithObjects:anIdeaVC, aListNC, anInnMapNC, aSearchNC, nil] animated:NO];
[tabBarController setSelectedViewController:anIdeaVC];
[tabBarController setDelegate:self];
}

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

[self initViewControllers];

[window setRootViewController:tabBarController];
[window makeKeyAndVisible];

return YES;
}

预先感谢您的帮助:-)。

最佳答案

我认为解决此问题的最佳方法是将带有图标的 vc 作为根目录。然后,当用户进行选择时,创建标签栏 vc 并将其设为根。

创建一个 View Controller (不仅仅是一个 View )来显示图标并获取用户选择。使窗口在启动时成为根...

- (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 方法添加到您的应用委托(delegate)的公共(public)接口(interface),以便可以从 IconSelectVC 调用它。然后添加最后一行,使其替换窗口的根 vc。

    // ... the rest of initViewControllers, then
[tabBarController setSelectedViewController:anIdeaVC];
[tabBarController setDelegate:self];

[window setRootViewController:tabBarController];
}

现在,当您决定更改 UI 时,在您的 IconSelectVC 中获取应用程序委托(delegate)单例并更改窗口的根。

// 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 过渡。

关于ios - 禁用/隐藏一个 View Controller 的 Root View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24851770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com