如何解决ios 7中ui选项卡栏的奇怪行为

如何解决ios 7中ui选项卡栏的奇怪行为,ios,ios7,uitabbarcontroller,Ios,Ios7,Uitabbarcontroller,我正在创建一个应用程序,其中我正在使用带有3个选项卡的选项卡栏。在iOS 6中一切正常,但在iOS 7中,当我单击选项卡3时,它会检查用户是否登录 -(void)viewWillAppear:(BOOL)animated { appdelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate]; appdelegate.strLoginMessage=@"setting"; BOOL isLog

我正在创建一个应用程序,其中我正在使用带有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中,我检查是否会出现用户登录或不在视图中。

我只能想象
视图会出现:
不会在UITabBarItem的每个后续点击中被调用

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


如果它实际上是W
视图将出现:
方法未被调用,我建议将此代码放置在UITabBarItem上每次点击都会调用的某个位置。

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

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

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

 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]];

您的视图将出现,但不是每次都调用。我检查了视图控制器是否也未在选项卡栏堆栈中设置。您是使用故事板还是在AppDelegate中执行此操作?在NSUserDefaults中,您在哪里设置“isLogin”的对象?您是否检查了布尔isLogin是否从NSUserDefaults中获得了正确的值?我在用户在登录页面中完全成功登录时设置了它。只是提醒一下,这在ios<7中非常有效。问题在于ios=7i以前尝试过,但问题是我必须在两个选项卡中检查用户登录,然后将用户导航到他登录的视图,例如,如果他从选项卡2登录,则他应该转到消息,如果他使用选项卡3登录,则转到设置,我上次不能这样做。然后你应该以模式视图的形式显示登录屏幕,它将覆盖整个屏幕,这样用户就不能导航到其他地方。