iOS - UITabBarController最佳实践中的登录视图

时间:2012-02-25 19:06:19

标签: ios uitabbarcontroller loginview

我的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食谱。但我找不到与此相关的任何内容。

1 个答案:

答案 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;


}