您好,我正在开发一个使用标签栏的应用程序。如果用户已登录,选项卡栏应该有 5 个选项卡,但如果用户已注销,则只有 3 个。我的 MainAppDelegate.m 中有一个 if
语句,它看起来像这样,其中 "uid"
指示用户是否已登录。
UIViewController *popular = [[[PopularViewController alloc] initWithNibName:@"PopularViewController" bundle:nil] autorelease];
UIViewController *upcoming = [[[UpcomingViewController alloc] initWithNibName:@"UpcomingViewController" bundle:nil] autorelease];
UIViewController *account = [[[AccountViewController alloc] initWithNibName:@"AccountViewController" bundle:nil] autorelease];
UIViewController *message = [[[MessageViewController alloc] initWithNibName:@"MessageViewController" bundle:nil] autorelease];
UIViewController *more = [[[MoreViewController alloc] initWithNibName:@"MoreViewController" bundle:nil] autorelease];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
if([prefs objectForKey:@"uid"]){
self.tabBarController.viewControllers = @[popular, upcoming, account, message, more];
}else{
self.tabBarController.viewControllers = @[popular, upcoming, more];
}
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
当用户注销时,我执行以下操作,通过删除只有在用户登录后才能看到的帐户和消息将我带到三个选项卡
NSMutableArray *tbViewControllers = [NSMutableArray arrayWithArray:[self.tabBarController viewControllers]];
[tbViewControllers removeObjectAtIndex:2];
[tbViewControllers removeObjectAtIndex:2];
[self.tabBarController setViewControllers:tbViewControllers];
现在在更多页面上是登录,所以如果他们按下,他们将被带到一个新的 View Controller 进行登录。如果他们成功登录,我将执行以下操作:
返回标签 View
[[self presentingViewController] dismissModalViewControllerAnimated:YES];
然后在viewWillAppear
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
if([prefs objectForKey:@"uid"]){
NSMutableArray *tbViewControllers = [NSMutableArray arrayWithArray:[self.tabBarController viewControllers]];
[tbViewControllers removeObjectAtIndex:2];
UIViewController *account = [[[AccountViewController alloc] initWithNibName:@"AccountViewController" bundle:nil] autorelease];
UIViewController *message = [[[MessageViewController alloc] initWithNibName:@"MessageViewController" bundle:nil] autorelease];
UIViewController *more = [[[MoreViewController alloc] initWithNibName:@"MoreViewController" bundle:nil] autorelease];
[tbViewControllers addObject:account];
[tbViewControllers addObject:message];
[tbViewControllers addObject:more];
[self.tabBarController setViewControllers:tbViewControllers];
}
问题是它们已经在更多页面上,因此删除索引 2 处的对象就是删除更多页面,从而导致应用程序崩溃,即使我看到 5 个选项卡在崩溃前就出现了。所以我的问题是如何在不删除更多选项卡的情况下将两个选项卡添加到中间?
感谢您的帮助!
最佳答案
好吧,我最终将代码移动到第一个选项卡中的 viewWillAppear,然后当我需要删除选项卡时,我设置了所需的变量并以编程方式跳转到第一个选项卡,然后根据需要进行设置,然后以编程方式我回到手机上什至没有实际显示的最后一个选项卡。
似乎有点 hackery 但它有效我会暂时保留这个问题,看看是否有更好的选择,我相信有
关于iOS 标签栏动态标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12655133/