我正在使用Facebook SDK登錄到我的應用程序。如果用戶未登錄,登錄VC將以模態方式出現。一旦用戶點擊登錄,它就會向App Delegate發出通知,告知登錄是否成功。如果是這樣,我想解僱模態登錄VC。我如何從應用程序代理執行此操作?從應用程序委託中解除模態視圖控制器
4
A
回答
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。
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];
}
相關問題
- 1. 從應用程序委託調用視圖控制器方法
- 2. 視圖控制器不是從應用程序委託呈現
- 3. iOS4中的應用程序委託和視圖控制器
- 4. Xcode的應用程序委託給每個視圖控制器
- 5. 應用程序委託人看不到視圖控制器
- 6. 如何從應用程序委託和/或其他視圖控制器訪問多個視圖控制器?
- 7. 解除模態視圖控制器
- 8. 解除模態視圖控制器
- 9. 使用委託給視圖控制器
- 10. 從應用程序委託傳遞數據到視圖控制器
- 11. swift,UIUserNotificationAction從視圖控制器,而不是應用程序委託
- 12. 委派和模態視圖控制器
- 13. 從應用委託推視圖控制器
- 14. 如何在應用程序啓動時從應用程序委託加載不同的視圖控制器類(例如,從應用程序委託)
- 15. 委託模態視圖swift
- 16. 從應用程序的委託打開控制器
- 17. CLLocationManager委託/多個視圖控制器
- 18. 視圖控制器委託返回無
- 19. 如何從視圖控制器中刪除應用程序委託文件中的rootview設置
- 20. 多視圖和應用程序委託?
- 21. 從tableView委託類中調用視圖控制器segue
- 22. 從視圖控制器類中調用委託方法
- 23. 參考指南:替換根視圖控制器/應用程序委託?
- 24. 使用應用委託更新視圖控制器的變量
- 25. 你如何從應用程序委託中解除UIActionSheet?
- 26. 訪問在另一個控制器的應用程序委託中創建的視圖控制器
- 27. 解除模態視圖後可見視圖控制器
- 28. 應用程序不呈現模態視圖控制器
- 29. 無法讓UIWEBVIEW在除應用程序委託之外的任何視圖控制器中工作
- 30. 如何從視圖控制器視圖返回到目標c中的應用程序委託控制器視圖?
我明白第一部分,AppDelegate顯然需要知道主持人視圖控制器是誰。但是,之後我感到有些困惑。我仍然在學習Objective-C,而且我不太清楚'在appDelegate上定義一個ivar「callDismissOnMeIfFaceBookFails」的意思,並且在你處於這種情況時設置它,否則它就是零。 有沒有可能提供一個快速示例的機會?真的很感謝你的幫助。 – 2012-08-13 10:27:11
非常感謝!我會告訴你一切,並讓你知道我如何繼續。 – 2012-08-13 12:21:37
完美無瑕!非常感謝! – 2012-08-13 16:54:29