首页 > 解决方案 > 适用于 iOS 的 Xamarin.Forms 使用 SceneDelegate.cs

问题描述

在 iOS 13 中,使用了 UIScene。必须将 AppDelegate.cs 中的代码移至 SceneDelegate.cs 以支持拆分视图中同一应用的多个窗口。

对于 Xamarin.Forms,AppDelegate.cs 使用 LoadApplication (new App()) 在 Xamarin.Forms 中启动 App.cs 的实例。LoadApplication 位于 Xamarin.Forms.Platform.iOS.FormsApplicationDelegate 中。

在 SceneDelegate.cs 中启动 Xamarin.Forms 中的 App.cs 实例的等效项是什么?

标签: xamarin.formsxamarin.ios

解决方案


从xamrin forms的应用程序生命周期:

  • iOSMain method > AppDelegate > App > ContentPage.
  • 安卓——MainActivity > App > ContentPage

我们之前会看到Main method调用App类,如果需要iOS的App实例,一般会尝试如下:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    global::Xamarin.Forms.Forms.Init();
    LoadApplication(new App(app)); // pass app to Forms 

    return base.FinishedLaunching(app, options);
}

但是,表格不能使用UIKit(错误截图)。

在此处输入图像描述

在 xamarin 表单中,有DependencyService来加载本地方法。因此,建议使用DependecyServiceapp从 iOS native调用AppDelegate.cs

关于SceneDelegate.cs在 Xamarin Forms 中使用,现在 iOS 解决方案中没有SceneDelegate.cs文件。我将检查是否可以在 Xamarin Forms 中使用。

===================================更新=============== ================

如果要处理中的通用链接AppDelegate.cs,您需要在continueUserActivity方法中执行以下操作:

public override bool ContinueUserActivity(UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
{
   //return base.ContinueUserActivity(application, userActivity, completionHandler);
    if(userActivity.ActivityType == NSUserActivityType.BrowsingWeb)
    {
        NSUrl url = userActivity.WebPageUrl;
        // other code
    }
    return true;
}

===================================更新=============== =================

最后,发现可以添加SceneDelegate到一个Xamarin Forms项目中。新的 Xamarin Forms 项目不附带必要的SceneDelegate.cs文件或 .storyboard 文件,因此需要添加这些文件。添加这些文件后,需要使用密钥更新info.plistUIApplicationSceneManifest,其中将包含更多需要的密钥。

添加的内容info.plist如下所示:https : //docs.microsoft.com/en-us/xamarin/ios/platform/ios13/multi-window-ipad#project-configuration(只是 UIApplicationSceneManifest 和下面的所有内容)

需要注意的两点是:

    1. 当应用程序的多个窗口运行时,该示例存在导航正常工作的问题。
    1. 这不是官方示例,因为 Xamarin.Forms 目前不提供官方支持以将多个场景与 iOS 应用程序一起使用。

非官方的 Xamarin.Forms 示例在这里:https ://www.dropbox.com/s/sdxq5me7vcdmuf9/XamFormsiOSMultiWindow.rar?dl=0


推荐阅读