如何在Xamarin中找到当前的UIViewController

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

我见过几个.net示例,例如NSArray *viewContrlls=[[self navigationController] viewControllers];[viewContrlls lastObject]; 但是,这种方法似乎不适用于Xamarin,因为self不包含navigationControllers的定义。

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

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

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

 var window= UIApplication.SharedApplication.KeyWindow; var vc = window.RootViewController; while (vc.PresentedViewController != null) { vc = vc.PresentedViewController; } 

如果它位于父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; }