상황 : 내 앱에 뷰 컨트롤러가 많으며 탐색 또는 모달 뷰 컨트롤러로 제공됩니다. 앱은 거의 모든 화면에서 서버와 통신합니다. 사용자의 자격 증명이 만료되었을 때 사용자에게 로그인 화면을 표시하려고합니다. 로그인 화면을 현재 화면 상단에 모달로 표시하고 로그인이 완료되면 즉시 닫으려고합니다. 나는 이것이 어떻게 성취 될 수 있는지 전혀 모른다. 일부보기 컨트롤러 및 로그인 화면에 의해 화면에 모달보기가 표시되는 경우이를 모달로 표시해야합니다. 나는 appDelegate에서 윈도우의 rootViewController 스위칭을 시도했지만 잘 작동하지 않았고 또한 많은 것을 엉망으로 만들었다. 제게 제안 해주세요.상단에보기 컨트롤러를 팝업하는 방법은 무엇입니까?
-1
A
답변
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에 대한 훌륭한 교과서 예제가 될 것입니다.
2
UIViewController
의 presentViewController:animated:completion:
방법을 확인하여 모달보기를 표시하십시오 (iOS < 5.0 용 건물이 아닌 경우).
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를 시작해야합니다.
감사합니다. Mundi. 그것은 효과가 있었다. – user1409592
그런 다음 체크 표시를 확인하십시오 ;-). – Mundi
호기심에서 벗어나 문제가되는 것과 관련이없는이 클래스는 특정 클래스의 공유 객체를 갖는 표준 방법입니까? – esqew