Xamarin.forms Xamarin.使用SceneDelegate.cs的iOS表单

Xamarin.forms Xamarin.使用SceneDelegate.cs的iOS表单,xamarin.forms,xamarin.ios,Xamarin.forms,Xamarin.ios,在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.

在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实例的等效功能是什么

  • iOS
    Main-method>AppDelegate>App>ContentPage
  • Android
    MainActivity>App>ContentPage
我们将看到,
Main方法
invoke
App
class之前,如果需要来自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);
}
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;
}
但是,表单不能使用
UIKit
(错误屏幕截图)

在xamarin表单中,需要加载导航方法。因此,建议使用DependecyService从iOS native
AppDelegate.cs
调用
app

关于在Xamarin表单中使用
SceneDelegate.cs
,iOS解决方案中现在没有
SceneDelegate.cs
文件。我将检查是否可能以Xamarin的形式出现

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

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

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);
}
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表单项目中。新的Xamarin表单项目没有必要的
SceneDelegate.cs
或.storyboard文件,因此需要添加这些文件。添加这些文件后,info.plist需要使用
UIApplicationSceneManifest
键更新,该键将包含更多需要的键

添加到
info.plist
的内容如下所示:(仅UIApplicationSceneManifest和下面的所有内容)

需要注意的两件事是:

  • 该示例在应用程序的多个窗口运行时存在导航正常工作的问题
  • 这不是一个正式的示例,因为Xamarin.Forms目前不提供对在iOS应用程序中使用多个场景的正式支持

非正式的Xamarin.Forms示例如下:

Hi,Xamarin.iOS中有一个
Main.cs
,这是应用程序的输入。在
SceneDelegate.cs
中,您可以指定要启动的根控制器或要使用的其他场景。你可以详细描述你想要实现的场景,然后我会检查。Main.cs启动AppDelegate。在AppDelegate.cs中,如果iOS>=13,则函数FinishedLaunching将返回true。然后,它将调用SceneDelegate.cs中的WillConnect函数。在这个函数中,我需要在Xamarin.Forms公共代码的App.xaml.cs中初始化App类的一个实例。在iOS 13中,SceneDelegate.cs用于支持拆分视图中同一应用的多个窗口。(). iPadOS13上的OneDrive应用程序就是一个例子。()在iPadOS13中,路径为Main method>AppDelegate>SceneDelegate>App>ContentPage@TekMun您好,我知道
SceneDelegate.cs
存在于iOS 13中,并且存在于Xamarin.iOS项目中。我的答案是关于Xamarin.Forms项目的。您是否在表单项目中?我在表单项目中,我想在表单项目中使用SceneDelegate.cs。@TekMun如果解决方案在此处共享,我将检查如何在表单中使用
SceneDelegate.cs
。能够在Xamarin.Forms中支持所有新的iOS功能非常有用。