【问题标题】:How to check user confidencial in a tab based application?如何在基于选项卡的应用程序中检查用户机密?
【发布时间】:2012-03-31 13:34:30
【问题描述】:

我正在构建一个基于标签的 iPhone 应用程序,每个标签中的所有信息都是与用户相关的,这意味着用户必须先登录才能进入每个标签。我将用户名/密码输入放在第一个选项卡中,成功登录后我会将用户机密存储在钥匙链中。但是,在用户输入其他选项卡之前检查它的最佳方法是什么?并防止未经授权的用户进入除登录选项卡以外的其他选项卡?我不想在每个视图控制器中都进行此验证。

【问题讨论】:

  • +1 用于使用钥匙串获取用户凭据。

标签: iphone ios uiviewcontroller uikit uitabbarcontroller


【解决方案1】:

这可以使用UITabBarControllerDelegate 来完成。

实施它,例如在您的 UIApplication 委托中并将其分配给您的 UITabBarController

AppDelegate 标头:

@interface AppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>
{
    //[...]
}
//[...]
@end

AppDelegate 实现:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //[...]

    //instanciate and configure your tabbarcontroller
    //[...]

    //assign this instance as the delegate of our tabbarcontroller
    tabBarController.delegate = self;
}

每当用户选择任何选项卡时,都会调用以下方法。返回 NO 意味着选择实际上不应该发生。例如,在这种情况下,您可以显示一条提醒用户先登录的警报。

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    //is the user logged in and did the user select any but the first tab?
    if (!userLoggedIn &&
        [tabBarController.viewControllers indexOfObject:viewController] != 0)
    {   //nope->...
        //force the user to the first tab
        tabBarController.selectedIndex = 0;
        //prevent the originally chosen tab selection
        return NO;
    }
    //user is logged in, it is safe to select the chosen tab
    return YES;
}

【讨论】:

  • 谢谢,还有一个问题,一旦验证失败,我可以强制用户转到第一个标签吗?
【解决方案2】:

您可以在 Singleton 类中使用方法(如在应用程序委托中)。在每个选项卡中,您都可以检查用户是否像

一样登录

如果(appdelegate.userLogine){ // 用户正在登录显示视图

}否则{ // 发布通知

}

【讨论】:

  • 谢谢,但是否有一个中心位置来执行此检查,而不是在每个选项卡控制器中调用检查逻辑?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多