2012-08-13 3 views
4

내 앱에 로그인 할 때 Facebook SDK를 사용하고 있습니다. 사용자가 로그인하지 않으면 로그인 VC가 모달로 나타납니다. 사용자가 로그인을하면 로그인 성공 여부를 App Delegate에 알립니다. 그렇다면 모달 로그인 VC를 취소하고 싶습니다. 앱 위임자로부터 어떻게합니까?응용 프로그램 대리인의 모달보기 컨트롤러 닫기

답변

4

appDelegate는 viewWindow를 호스팅하는 사람을 식별 할 수있는 방법이 필요하기 때문에 dismiss 메시지를 보낼 수 있습니다. 이 일을 가능하게하는 방법을 찾아야합니다. 한 가지 방법은 appDelegate "callDismissOnMeIfFaceBookFails"에 ivar을 정의하고이 상황에있을 때 설정하거나, 그렇지 않으면 설정하지 않을 것입니다.

만약 nil이라면, appDelegate는 오버 헤드없이 아무런 문제없이 해제 메시지를 보낼 수 있습니다. 귀하의 이익을 위해 무제한 메시징을 사용하십시오 (나는 항상 사용합니다). [옆으로 : 나는 너무 많은 코드를 본다. if (obj) [obj message]; 바로 메시지를 보낼 - - 경우하지 마십시오 obj가 아무 효과가 없습니다 효율적으로 처리 전무 인 경우]

편집 :!

그래서 당신은 클래스 AppDelegate에 있습니다. # 인터페이스에서 속성을 정의하십시오 :

@property (nonatomic, strong) UIViewController *callDismissOnMeIfFaceBookFails; 

및 구현시 @ 합성하십시오. 방법을 정의 모달 뷰 컨트롤러가 제시되기 전에

- (void)dismissLoginView 
{ 
    [callDismissOnMeIfFaceBookFails dismissModalViewControllerAnimated:YES]; 
    callDismissOnMeIfFaceBookFails = nil; // don't need it now, this unretains it 
} 

그래서, 상기 제시하는 오브젝트 자체에 AppDelegate에 속성 "callDismissOnMeIfFaceBookFails"을 설정한다.

사용자가 성공적으로 로그인하면 로그인 객체는 appDelegate에 메시지를 보내고이를 통해 loginView를 dismiss하도록 지시합니다.

+0

AppDelegate는 분명히 호스팅보기 컨트롤러가 누구인지 알아야합니다. 그러나, 나는 그 후 약간 혼란스러워진다. 나는 여전히 Objective-C를 배우고 있는데, 'appDelegate "callDismissOnMeIfFaceBookFails"에 ivar을 정의하고이 상황에있을 때 설정하십시오. 그렇지 않으면 nil로 설정하십시오.' 간단한 예를 제공 할 수있는 기회가 있습니까? 지금까지 정말 도와 주셔서 감사합니다. –

+0

정말 고마워요! 나는이 일을 줄 것이며 내가 어떻게 일어나는지 알려줄거야. –

+0

완벽하게 작동합니다! 정말 고맙습니다! –

7
어떤 일이있을 때 당신은 어떤 특정의 ViewController가 제공되고 있는지 확인하고 싶을 경우 모달 뷰 컨트롤러

UINavigationController *navigationController = (id) self.window.rootViewController; 
[[navigationController presentedViewController] dismissModalViewControllerAnimated:NO]; 

에게 제시하는 바와 같이, 발표의 ViewController를 해고하려고 (즉, 만 해제 할 수

표시된) 수표에 추가 할 수 있습니다.

UIViewController *viewController = [navigationController presentedViewController]; 

if ([viewController isMemberOfClass:[YourViewController class]]) { 
    [viewController dismissModalViewControllerAnimated:NO]; 
} 
관련 문제