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