无法在iOS版Xamarin获得RootViewController的

问题描述 投票:2回答:4

我创建的应用程序,使用天青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任何其他方式

xamarin xamarin.ios xamarin.forms
4个回答
2
投票

这看起来蠢方法有效。

        UIWindow window = UIApplication.SharedApplication.KeyWindow;
        UIViewController presentedVC = window.RootViewController;
        while (presentedVC.PresentedViewController != null)
        {
            presentedVC = presentedVC.PresentedViewController;
        }

0
投票

我想这也代码,但它无法正常工作。

我得到这个问题的根本原因。问题是,当我去访问RootViewController的话,应该至少有一个页面初始化,但它没有被初始化,所以我无法得到RootViewController的

所以我给每天来初始化页面,然后我得到了RootViewController的


0
投票

你的窗口后访问RootViewController实际创建。做到这一点base.FinishedLauching后,像这样的:

var result = base.FinishedLaunching(app, options);
var platformParameters = UIApplication.SharedApplication.KeyWindow.RootViewController;
App.AuthenticationClient.PlatformParameters = new PlatformParameters(platformParameters);
return result;

0
投票

根据窗口的类型,您已加载得到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; 
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.