gpt4 book ai didi

c# - 如何在 Xamarin 中查找当前的 UIViewController

转载 作者:太空狗 更新时间:2023-10-29 19:52:21 25 4
gpt4 key购买 nike

我正在使用 Facebook Auth SDK , 使用 Xamarin Forms C# example .然而,Facebook SDK 已经贬低了该方法并将其替换为将 fromViewController 变量添加到构造函数中的方法。我对 Xamarin 中的 ViewControllers 的概念不是特别满意,或者实际上对来自样本的这段代码不太满意,那么有没有办法衡量当前的 ViewController?

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

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

最佳答案

更新为了在竞争条件下支持较新的 iOS 版本,此方法变得有点复杂。这是该实用程序的新版本,有一些改进:

public static UIViewController? GetTopViewController()
{
var window = UIApplication.SharedApplication.GetKeyWindow();
var vc = window?.RootViewController;
while (vc is { PresentedViewController: { } })
vc = vc.PresentedViewController;

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

return vc;
}

public static UIWindow? GetKeyWindow(this UIApplication application)
{
if (!UIDevice.CurrentDevice.CheckSystemVersion(13, 0))
return application.KeyWindow; // deprecated in iOS 13

var window = application
.ConnectedScenes
.ToArray()
.OfType<UIWindowScene>()
.SelectMany(scene => scene.Windows)
.FirstOrDefault(window => window.IsKeyWindow);

return window;
}

旧答案

如果当前 View Controller 位于父 UINavigationController 的堆栈中,则接受的答案不会为您提供当前 View Controller ,因此我想出了以下内容:

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;
}

关于c# - 如何在 Xamarin 中查找当前的 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34582728/

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