iOS 标签栏动态标签

标签 ios uitabbarcontroller

您好,我正在开发一个使用标签栏的应用程序。如果用户已登录,选项卡栏应该有 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/

相关文章:

ios - 如何在从 SlideMenuViewController 实例化的 ViewController 中打开 TabBarController

javascript - 如果应用程序存在,链接到打开的 facebook 应用程序,否则网页

ios - 为什么我在 iOS 6 中切换 tabBar Items 数组时出现黑屏?

iphone - 使用 uitabbarcontroller 动画 View 更改

iOS弹出窗口如何去除阴影

ios - 自定义委托(delegate)方法未触发

ios - 将音频保存到 iTunes 资料库

ios - 当应用程序从后台进入前台时,UITableViewCell 中的 UIButton 不保留图像?

iphone - UISegmentedView 中的 UIButton 没有被按下

iOS - 删除 UITabBarViewController 阴影