我的tabbar控制器上有6到7个标签,允许自定义(意味着用户可以更改标签栏显示的顺序)。选项卡1,3,5,7要求用户在查看视图上的任何内容之前登录访问权限。
我不知道如何识别哪个tabbar需要登录访问权限(我们可以创建@protocal或其他东西)。并在用户成功登录后。我不知道如何选择用户已触及的最后一个标签栏。
我通过在AppDelegate中使用UITabBarControllerDelegate来使用appdelegate
-(BOOL)tabBarController:(UITabBarController *)aTabBar shouldSelectViewController:(UIViewController *)viewController {
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
BOOL hasValidLogin = [standardUserDefaults boolForKey:@"hasValidLogin"];
if (hasValidLogin == NO && /* I don't know to find a controller which requires login access*/) {
[LoginView showModal:viewController delegate:self];
return NO;
}
return YES;
}
pragma mark - pragma mark LoginDelegate方法 -
-(void)loginViewController:(LoginView *)loginViewController didLoginSuccess:NSString *)userName {
NSLog((@"%s [Line %d] "), __func__, __LINE__);
NSLog(@"userName = %@", userName);
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
[standardUserDefaults setBool:YES forKey:@"hasValidLogin"];
[standardUserDefaults synchronize];
[self.tabBarController setSelected:/* How do i find the last touched tabbar*/];
}
您可以指导我的任何良好做法,食谱和代码片段表示赞赏。
我正在阅读亚马的iOS食谱。但我找不到与此相关的任何内容。
答案 0 :(得分:0)
专注于 UITabBarDelegate didSelectItem 。跟踪以前选择的标签项。如果用户未通过身份验证,请弹出身份验证屏幕并选择以前选择的标签项。这是一个例子。
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
switch ( item.tag ) {
case ME_TAB_BAR_TAG:
if ( [AppHelper checkAuthentication] ) {
[self showMe:YES];
} else if ( previousItem ) {
[tabBar setSelectedItem:previousItem];
return;
}
break;
case ITEMS_TAB_BAR_TAG:
[self showMe:NO];
break;
case CREATE_TAB_BAR_TAG:
if ( [AppHelper checkAuthentication] ) {
[self createNewItem];
} else if ( previousItem ) {
[tabBar setSelectedItem:previousItem];
return;
}
break;
}
previousItem = item;
}