gpt4 book ai didi

ios - 如何正确获取最顶层的 View Controller 并进行转换

转载 作者:行者123 更新时间:2023-11-29 02:17:54 27 4
gpt4 key购买 nike

嗨,我有这个导航堆栈:

NavigationController-->ViewController-->With subsequent VCs

在最顶层的 VC 中,我有一个事件指示器,当用户单击“使用 Facebook 登录”时我会打开它,然后想在关闭 FBRequestConnection 时将其关闭。 FBRequestConnection 是异步的,因此需要从闭包中将其关闭。

以下方法不是从 LoginVC 本身内部调用的,因此我需要将其从导航堆栈中取出。我尝试过:

if let loginVC = UIApplication.sharedApplication().keyWindow?.rootViewController?.navigationController?.visibleViewController? as? LoginVC {
loginVC.turnOffActivityIndictator()
}

还有:

if let loginVC = UIApplication.sharedApplication().delegate?.window??.rootViewController as? LoginVC {
loginVC.turnOffActivityIndictator()
}

但它不起作用。我也尝试了其他建议,但无法找到解决方案。我该如何解决这个问题,或者其他人有更好的想法吗?

XCode 中的变量 window 看起来一切正常,但 if let 语句只是跳过了尾随的 {},这意味着 as?如果我是正确的就失败了?

enter image description here

这是(不完整的)方法:

private class func makeRequestForUserData() -> Void {
var dict = NSMutableDictionary()
FBRequestConnection.startForMeWithCompletionHandler({(connection, result, error) -> Void in
if (error == nil) {
// Success! Include your code to handle the results here
let resultDict = result as [String:AnyObject]
if let usersEmail = resultDict["email"] as? String {
if DBUser.loginUserForEmail(usersEmail) == true {
//Go to main menu
}else {
// no user exists.. alert message
// take then to sign up page
}
}else{
// error got nothing from the result dict!!
}
if let loginVC = UIApplication.sharedApplication().keyWindow?.rootViewController?.navigationController?.visibleViewController? as? LoginVC {
loginVC.turnOffActivityIndictator()
}
} else {
// An error occurred, we need to handle the error
// Check out our error handling guide: https://developers.facebook.com/docs/ios/errors/
FBErrorHandler.processError(error)
}
})
}

最佳答案

NavigationController-->ViewController-->With subsequent VCs

从这个导航堆栈中,您的 rootViewController 没有 navigationController 但它本身就是 navigationController 所以UIApplication.sharedApplication().keyWindow?.rootViewController?.navigationController? 我认为返回 nil。尝试将 rootViewController 转换为 UINavigationController 然后获取它的 viewControllers,然后获取所需的 viewController

if let viewControllers = (UIApplication.sharedApplication().keyWindow?.rootViewController? as UINavigationController).viewControllers {

//get first controller in hierarchy
if let loginVC = viewControllers[0] as? LoginVC{

loginVC.turnOffActivityIndictator()
}
}

关于ios - 如何正确获取最顶层的 View Controller 并进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28539017/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com