gpt4 book ai didi

ios - 我如何知道 GHosted Authenticate ViewController 何时消失?

转载 作者:行者123 更新时间:2023-12-01 22:45:36 26 4
gpt4 key购买 nike

我正在尝试检测 Apple 的 GameKit 用户身份验证 View 何时在 Cocos2D 应用程序中被解除并消失。我想在用户通过身份验证后立即显示另一个 View ,因此我只是想找到合适的触发器。

这就是我正在做的事情:按照Apple的游戏中心编程指南,我正在检查[[GKLocalPlayer localPlayer] isAuthenticated],如果用户未经过身份验证,我将设置authenticateHandler 并保存返回的 viewController,如下所示:

[GKLocalPlayer localPlayer].authenticateHandler = ^(UIViewController *viewController, NSError *error){
if (viewController != nil)
{
//save the returned view controller to show it when user tries to access leaderboards, etc.
_savedGCAuthViewController = viewController;
} else if([[GKLocalPlayer localPlayer] isAuthenticated]){
_userAuthenticated = YES;
}
};

我保存返回的 viewController,以便我可以在更合适的时间显示它,如下所示:

AppController *appDelegate = (AppController *)[[UIApplication sharedApplication] delegate];
[appDelegate.navController presentViewController:_savedGCAuthViewController animated:YES completion:nil];

一切正常。问题是我无法知道该 View 何时消失。

我在 StackOverflow 上看到的所有其他问题/答案都说在这种情况下对 viewController 进行子类化以利用 viewDidDisappear 方法,但我无法对 View Controller 进行子类化,因为 Apple 不提供对GKHostedAuthenticateViewController 类的 header 。

我还挖掘了任何可以利用的通知消息,但看起来 UIViewController 没有使用任何 NSNotificationCenter 样式的消息。

想法?

我对 iOS 比较陌生,但是有没有一种方法可以以某种方式进入 View 层次结构并插入我自己的 View ,该 View 在 GKHostedAuthenticateViewController 执行时会被处理掉?也许作为父 View Controller 或 subview Controller ?

谢谢!

最佳答案

您可以在呈现之前将 GKHostedAuthenticateViewController 包装在您自己的 Controller 中,这样您就可以访问 viewDidDisappear/viewWillDisappear 方法:

// Simple class to wrap GKHostedAuthenticateViewController
class AuthController: UINavigationController {

var viewWillDisappearHandler: ((Bool) -> ())?

convenience init(authController: UIViewController) {
self.init(rootViewController: authController)

self.modalInPopover = true
self.modalPresentationStyle = UIModalPresentationStyle.FormSheet
self.navigationBarHidden = true
self.preferredContentSize = authController.preferredContentSize
}

override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
viewWillDisappearHandler?(animated)
}
}

然后在您的GKLocalPlayer.authenticateHandler中您可以设置viewWillDisappearHandler:

GKLocalPlayer.localPlayer().authenticateHandler = { 
(viewController: UIViewController?, error: NSError?) -> Void in

if let viewController = viewController {
let authController = AuthController(authController: viewController)
authController.viewWillDisappearHandler = { (animated: Bool) -> () in
println("viewController is disappearing")
}
self.presentViewController(authController, animated: true, completion: nil)
} else {
// Authenticated
}
}

关于ios - 我如何知道 GHosted Authenticate ViewController 何时消失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25513472/

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