2012-02-25 2 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

관련 문제