Xamarin.forms Xamarin.使用SceneDelegate.cs的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.cs中,在Xamarin.Forms中启动App.cs实例的等效功能是什么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–
李>Main-method>AppDelegate>App>ContentPage
- Android–
MainActivity>App>ContentPage
Main方法
invokeApp
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 nativeAppDelegate.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功能非常有用。