0

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

4

3 回答 3

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]];
于 2013-11-22T10:41:58.090 回答
1

我只能想象viewWillAppear:在 UITabBarItem 的每个后续点击中都不会被调用。

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

如果实际上viewWillAppear:没有调用该方法,我建议将此代码放置在每次点击 UITabBarItem 时都会调用的某个位置。

于 2013-11-13T09:20:47.957 回答
0

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

ViewController *view = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
appDelegate.window.rootViewController = view;
于 2013-11-13T09:44:59.367 回答