2012-03-31 2 views
1

나는 탭 기반의 아이폰 애플리케이션을 만들고 있는데, 각 탭의 모든 정보는 사용자와 관련이있다. 즉, 사용자는 각 탭으로 이동하기 전에 로그인해야한다. 나는 첫 번째 탭에 사용자 이름/암호 입력을 넣었고 로그인 성공 후 키 체인에 사용자 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

관련 문제