我创建的应用程序,使用天青AD其中验证
在Android中它工作正常,但在iOS上,它需要RootViewController
负载的页面。但是UIApplication.SharedApplication.KeyWindow
为空。所以,我不能够得到UIApplication.SharedApplication.KeyWindow.RootViewController
贝娄是代码:
var authResult = await authContext.AcquireTokenAsync(
graphResourceUri,
ApplicationID,
new Uri(returnUri),
new PlatformParameters(UIApplication.SharedApplication.KeyWindow.RootViewController)
);
从中我可以得到RootViewController
任何其他方式
这看起来蠢方法有效。
UIWindow window = UIApplication.SharedApplication.KeyWindow;
UIViewController presentedVC = window.RootViewController;
while (presentedVC.PresentedViewController != null)
{
presentedVC = presentedVC.PresentedViewController;
}
我想这也代码,但它无法正常工作。
我得到这个问题的根本原因。问题是,当我去访问RootViewController的话,应该至少有一个页面初始化,但它没有被初始化,所以我无法得到RootViewController的
所以我给每天来初始化页面,然后我得到了RootViewController的
你的窗口后访问RootViewController
实际创建。做到这一点base.FinishedLauching
后,像这样的:
var result = base.FinishedLaunching(app, options);
var platformParameters = UIApplication.SharedApplication.KeyWindow.RootViewController;
App.AuthenticationClient.PlatformParameters = new PlatformParameters(platformParameters);
return result;
根据窗口的类型,您已加载得到RootViewController的可能会有问题。这个版本一直是最稳定的一个迄今为止我已经试过,避免尾递归循环。
public UIViewController GetRootController(){
var root = UIApplication.SharedApplication.KeyWindow.RootViewController;
while (true)
{
switch (root)
{
case UINavigationController navigationController:
root = navigationController.VisibleViewController;
continue;
case UITabBarController uiTabBarController:
root = uiTabBarController.SelectedViewController;
continue;
}
if (root.PresentedViewController == null) return root;
root = root.PresentedViewController;
}
}