如何解决ios 7中ui tab bar的奇怪行为

时间:2013-11-13 09:12:09

标签: ios ios7 uitabbarcontroller

我正在创建一个应用程序,我在其中使用带有3个选项卡的标签栏。在iOS 6中一切正常,但在iOS 7中,当我点击标签3时,它会检查用户是否登录。

-(void)viewWillAppear:(BOOL)animated
{
     appdelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
     appdelegate.strLoginMessage=@"setting";
     BOOL isLogin= [[[NSUserDefaults standardUserDefaults] objectForKey:@"isLogin"]intValue ];
     if (isLogin) 
     {
         [self webService_Count];
     }
     else
     {
         appdelegate.showLoginBack=NO;
         ViewController *view=[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
         [self.navigationController pushViewController:view animated:YES];
    }
}

如果用户未登录,则将其发送到登录页面。但是,如果用户点击选项卡3,则从这里进入设置页面而不登录。如果用户再次单击选项卡3,则显示黑屏。我不明白为什么?

这是我在appDelegate

中设置标签栏的方法
self.nav= [[UINavigationController alloc]initWithRootViewController:self.viewController];
self.nav1=[[UINavigationController alloc]initWithRootViewController:self.messageviewcontroller];
self.nav2=[[UINavigationController alloc]initWithRootViewController:self.settingviewController];

在nav1和nav2中,我会检查用户是否在视图中登录。

3 个答案:

答案 0 :(得分:1)

我只能想象在UITabBarItem的每个后续点击中都没有调用viewWillAppear:

您是否在要检查的方法中设置了断点?

如果实际上没有调用w viewWillAppear:方法,我建议将此代码放在UITabBarItem上每次点击时调用的地方。

答案 1 :(得分:1)

以下解决我的问题。我在登录后更改了根视图,并在注销时将登录页面作为根视图进行了分配。

 ViewController *view=[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
            [self.navigationController setViewControllers:[NSArray arrayWithObject:view] animated:YES];

            MessageLoginViewController *message=[[MessageLoginViewController alloc]initWithNibName:@"MessageLoginViewController" bundle:nil];
            [appdelegate.nav1 setViewControllers:[NSArray arrayWithObject:message]];

答案 2 :(得分:0)

您应检查用户是否未登录,然后将登录屏幕显示为根视图,而不是将其推送到当前导航控制器:

ViewController *view = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
appDelegate.window.rootViewController = view;