2012-02-25 11 views
1

私は6から7個のタブを持つタブバーコントローラを用意しています。これは、カスタマイズが許可されているため(ユーザーがタブバー表示の順序を変更できることを意味します)。また、タブ1,3,5,7では、ビュー上のコンテンツを見る前にユーザーがログインする必要があります。iOS - UITabBarControlerのベストプラクティスでのログインビュー

どのタブバーにログインアクセスが必要なのかわかりません(@protocalなどを作成できますか)。ユーザーが正常にログインした後。ユーザーが触れた最後のタブバーを選択する方法がわかりません。

は 私は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; 
} 

プラグママークにUITabBarControllerDelegateにconfimingによりappdelegate使用していた

- プラグママークLoginDelegate methods-

-(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

フォーカス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; 


} 
+0

ありがとうございました!これを行うのが好ましい方法ですか?この機能を実行する他の方法はありますか? – mohan

+1

ありがとうピーター!これを行うのが好ましい方法ですか?この機能を実行する他の方法はありますか?そして、私があなたが「 - NSInternalInconsistencyException」というメッセージを表示しているのを踏襲しようとすると、「タブバーコントローラによって管理されるタブバーのデリゲートを変更することはできません。 ***最初のスローでコールスタック: " – mohan

+0

私は同じ問題に遭遇しました。誰でも手伝うことができます。 – VvDPzZ

関連する問題