2012-03-31 11 views
1

私はタブベースのiphoneアプリケーションを構築しています。各タブのすべての情報はユーザーに関連しています。つまり、各タブに移動する前にログインする必要があります。最初のタブにユーザー名とパスワードの入力を入れ、ログインが成功したらキーチェーンにユーザーconfidencialを保存します。しかし、ユーザーが他のタブを入力する前に、それをチェックする最良の方法は何ですか?許可されていないユーザーがログインタブ以外のタブに入るのを防ぐことができますか?私はすべてのビューコントローラでこの検証をしたくありません。タブベースのアプリケーションでユーザーのConfidencialをチェックする方法は?

+0

+1ユーザーの資格情報にキーチェーンを使用する場合。 – Till

答えて

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; 
} 
+0

もう一度質問します。検証が失敗したら、ユーザーに最初のタブに移動することができますか? – scottliyq

+0

@scottliyqはい、私の編集を見ることができます。 – Till

1

(アプリデリゲートのような)シングルトンクラスでメソッドを使用できます。すべてのタブでは、(appdelegate.userLogine)は他の{ //ポスト通知

} { //ユーザーがショービュー

ログインしている}場合、ユーザは

のようにログインしているかどうかを確認することができます

+0

ありがとうございます。しかし、すべてのタブコントローラでチェックロジックを呼び出す代わりに、このチェックを行う中心的な場所はありますか? – scottliyq

関連する問題