2012-08-13 69 views
4

我正在使用Facebook SDK登錄到我的應用程序。如果用戶未登錄,登錄VC將以模態方式出現。一旦用戶點擊登錄,它就會向App Delegate發出通知,告知登錄是否成功。如果是這樣,我想解僱模態登錄VC。我如何從應用程序代理執行此操作?從應用程序委託中解除模態視圖控制器

回答

4

appDelegate需要一些方法來知道託管viewController是誰,因此它可以發送解僱消息。你需要找出一些辦法來實現這一點。一種方法是在appDelegate「callDismissOnMeIfFaceBookFails」上定義一個ivar,並在你處於這種情況時設置它,否則爲零。

注意,如果它的零,appDelegate可以發送解僱消息沒有開銷沒有問題!使用無消息傳遞給你的優勢(我一直使用它)。 [旁白:我看到這麼多的代碼「if(obj)[obj message];」不要做,如果 - 僅僅發送消息 - 如果obj是零它沒有任何效果,並有效地處理]

編輯:!

所以,你有一個類的AppDelegate。在#interface中定義一個屬性:

@property (nonatomic, strong) UIViewController *callDismissOnMeIfFaceBookFails; 

並且在執行時你會@synthesize它。定義一個方法:

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

所以,被呈現在模態視圖控制器之前,該呈現對象設置的appDelegate屬性「callDismissOnMeIfFaceBookFails」到其自身。

當用戶成功登錄後,登錄對象將消息發送到appDelegate,告訴它關閉LoginView。

+0

我明白第一部分,AppDelegate顯然需要知道主持人視圖控制器是誰。但是,之後我感到有些困惑。我仍然在學習Objective-C,而且我不太清楚'在appDelegate上定義一個ivar「callDismissOnMeIfFaceBookFails」的意思,並且在你處於這種情況時設置它,否則它就是零。 有沒有可能提供一個快速示例的機會?真的很感謝你的幫助。 – 2012-08-13 10:27:11

+0

非常感謝!我會告訴你一切,並讓你知道我如何繼續。 – 2012-08-13 12:21:37

+0

完美無瑕!非常感謝! – 2012-08-13 16:54:29

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]; 
} 
相關問題