2012-10-10 4 views
-1

상황 : 내 앱에 뷰 컨트롤러가 많으며 탐색 또는 모달 뷰 컨트롤러로 제공됩니다. 앱은 거의 모든 화면에서 서버와 통신합니다. 사용자의 자격 증명이 만료되었을 때 사용자에게 로그인 화면을 표시하려고합니다. 로그인 화면을 현재 화면 상단에 모달로 표시하고 로그인이 완료되면 즉시 닫으려고합니다. 나는 이것이 어떻게 성취 될 수 있는지 전혀 모른다. 일부보기 컨트롤러 및 로그인 화면에 의해 화면에 모달보기가 표시되는 경우이를 모달로 표시해야합니다. 나는 appDelegate에서 윈도우의 rootViewController 스위칭을 시도했지만 잘 작동하지 않았고 또한 많은 것을 엉망으로 만들었다. 제게 제안 해주세요.상단에보기 컨트롤러를 팝업하는 방법은 무엇입니까?

답변

1

귀하의 문제를 참조하십시오. 내 생각에 가장 좋은 방법은 간단한 클래스가 있다고 말하면서 앱을 평생 동안 두지 말고 LoginHandler.h라고 말하면됩니다.

앱을 시작할 때 초기화하지 않아도됩니다. 당신이 그것을 필요로 할 때 당신은 항상이 클래스의 동일한 인스턴스를 얻을 수있는 편리한 트릭을 구현할 수 있습니다

// @interface 
+(id)sharedHandler; 

//@implementation 
+(id)sharedHandler { 
    static id sharedHandler = nil; 
    if (sharedHandler == nil) { 
     [sharedHandler = [[LoginHandler alloc] init]; 
    } 
    return sharedHandler; 
} 

지금 당신은 단순히 사용자 NSUserDefaults 또는 UIApplication 유사 [LoginHandler sharedHandler]과 공유 인스턴스를 얻을.

당신은 이런 일에 모델 뷰 컨트롤러를 제공

-(BOOL)renewLoginFromViewController:(UIViewController*)controller`; 

같은 방법을 가질 수

:

[controller presentModalViewController:loginScreen]; 

및 로그인이 성공하면 (또는 전에 사라지지 YES을 반환합니다 로그인이 완료되었습니다.)

이 클래스의 모든 로그인 논리를 처리 할 수 ​​있습니다. encapsulation에 대한 훌륭한 교과서 예제가 될 것입니다.

+0

감사합니다. Mundi. 그것은 효과가 있었다. – user1409592

+0

그런 다음 체크 표시를 확인하십시오 ;-). – Mundi

+0

호기심에서 벗어나 문제가되는 것과 관련이없는이 클래스는 특정 클래스의 공유 객체를 갖는 표준 방법입니까? – esqew

0

앱이 시작될 때만 확인하는 것이 좋습니다. 이렇게하면 didFinishLaunchWithOptions의 AppDelegate.m에서이 작업을 수행하는 것이 좋습니다.

당신은 그런 식으로 뭔가를 할 수 있습니다

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
// Override point for customization after application launch. 
if (USER_HAS_VALID_CREDENTIALS) { 
    self.viewController = [[[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil] autorelease]; 
} else { 
    self.viewController = [[[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil] autorelease]; // need to get credentials 
} 
self.window.rootViewController = self.viewController; 
[self.window makeKeyAndVisible]; 

는 성공적으로 로그인 한 후 LoginViewController에서 RootViewController를 시작해야합니다.

관련 문제