如何在Xamarin中找到当前的UIViewController

Geo*_*rds 7 .net c# facebook xamarin.ios xamarin

我正在使用Facebook Auth SDK,以及Xamarin Forms C#示例.但是,Facebook SDK已经对该方法进行了折旧,并将其替换fromViewController为在构造函数中添加变量的方法.我对Xamarin中的ViewControllers概念并不是特别熟悉,或者确实使用这个代码,因为它来自一个样本,所以有没有办法测量当前的ViewController?

我已经看到了一些.net示例,NSArray *viewContrlls=[[self navigationController] viewControllers];[viewContrlls lastObject];但是,这种方法似乎不适用于Xamarin,因为self它不包含navigationControllers的定义.

或者,是否有任何方法可以使用示例代码轻松计算出当前ViewController的哪个变量?

xle*_*eon 12

接受的答案不会给你当前的视图控制器,如果它在父级的堆栈中UINavigationController,所以我想出了以下内容:

public static UIViewController GetTopViewController()
{
    var window = UIApplication.SharedApplication.KeyWindow;
    var vc = window.RootViewController;
    while (vc.PresentedViewController != null)
        vc = vc.PresentedViewController;

    if (vc is UINavigationController navController)
        vc = navController.ViewControllers.Last();

    return vc;
}
Run Code Online (Sandbox Code Playgroud)


Jas*_*son 10

执行此操作的最佳方法是传入对调用Auth方法的ViewController的引用.

但是,您也可以尝试这种方法(由AdamMemp在Xamarin论坛上提供)

var window= UIApplication.SharedApplication.KeyWindow;
var vc = window.RootViewController;
while (vc.PresentedViewController != null)
{
    vc = vc.PresentedViewController;
}
Run Code Online (Sandbox Code Playgroud)