【问题标题】:How to remove the last tab from uitabbarcontroller if having only three tabs如果只有三个选项卡,如何从 uitabbarcontroller 中删除最后一个选项卡
【发布时间】:2012-02-06 18:21:36
【问题描述】:

我在这里尝试从 uitabbarcontroller 动态添加和删除选项卡。

以及替换它们。我的应用情况如下。

第一个视图是登录和关于

成功登录后新的 3 个选项卡。最后一个是 More 和另外两个。

选择此选项后,我想删除最后一个选项卡和

将前两个替换为再次登录和关于。即(主视图)

所以在我的代码中我正在这样做............

///AppDelegate.m

  • (BOOL)应用程序:(UIApplication *)应用程序 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // 应用程序启动后的自定义覆盖点。

    self.window.rootViewController = tabBarCntr; tabBarCntr=[[UITabBarController alloc]init]; LogonViewController *logon=[[LogonViewController alloc]init]; logon.tabBarItem.title=@"登录"; AboutViewController *about=[[AboutViewController alloc]init]; about.tabBarItem.title=@"关于"; tabBarCntr.viewControllers=[NSArray arrayWithObjects:sos1,about,nil]; [登录发布]; [关于发布];

    [self.window addSubview:tabBarCntr.view];

    [self.window makeKeyAndVisible]; }

在我的 IBAction 中成功登录后将新的视图控制器设置为 tabbarcontroller

self.tabBarController.viewControllers=[NSArray

arrayWithObjects:newController1,newController2,more,nil];

    Now in my loggoff i coding something like.....
       NSMutableArray *newArray;   
     newArray=[NSMutableArray arrayWithArray:self.tabBarController.viewControllers];
       [newArray replaceObjectAtIndex:0 withObject:logon];
       [newArray replaceObjectAtIndex:1 withObject:about];
       [newArray removeLastObject];
       self.tabBarController.selectedIndex=0;
       [self.tabBarController setViewControllers : newArray];


  but my applcation crash here after this ....
 can any has solution for this ...

提前谢谢。

帕吉耶

编辑:NSMutableArray arrayWithArray 添加了空间来修复代码

【问题讨论】:

    标签: ios ios-4.2 ios4


    【解决方案1】:

    在我看来,您使用了 2 个单独的 tabBarControllers。一个用于登录,另一个用于应用程序。登录后删除并释放登录选项卡并添加应用程序选项卡。注销后再次删除并释放应用程序选项卡并添加登录选项卡。 这将更容易访问选项卡,而不是删除/添加视图控制器、重命名选项卡、更改选项卡图像。

    【讨论】:

    • thnks 很多但是我如何使用两个单独的 tabbarcontroller,因为我将第一个作为子视图添加到窗口
    • 在 appDelegate 中创建 2 个标签栏控制器实例,在这里您可以编写一个添加到窗口的方法。您可以在此方法中维护标签栏。
    • @vishy 非常感谢您的建议也对我有用。我仍然很惊讶为什么我没有考虑这个简单的解决方案。
    【解决方案2】:

    您可以通过属性 setViewControllers:animated:YES 来修改标签栏控制器。您可以在那里分配一个新数组。它会相应地切换。

    [tabBarController setViewControllers:array animated:YES];

    有一个重要的问题。我使用手动引用计数,但是我使用自动释放选项分配给这个数组的视图控制器,因为我使用 Xcode 模板作为应用程序基础。这些仅由该数组保留。如果您忘记保留在应用程序生命周期中可能出现在不同选项卡数组中的所有视图控制器,那么在更改后、更改期间甚至数组初始化期间都会出现奇怪的内存崩溃。因此有必要保留您对这些视图控制器的引用/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      相关资源
      最近更新 更多