MvvmCross 6 中的子类 UIWindow
Posted
技术标签:
【中文标题】MvvmCross 6 中的子类 UIWindow【英文标题】:Subclass UIWindow in MvvmCross 6 【发布时间】:2019-01-11 12:43:22 【问题描述】:在更新到 MvvmCross 6 之前,我们曾经在 ios 上继承 UIWindow 并将其设置为 AppDelagate 中的 keywindow 以检测应用程序中的所有事件,我们过去使用 Setup 的方式现在在 MvvmCross 6.0 中发生了变化。
https://www.mvvmcross.com/mvvmcross-6.0.0-release/
应用开始
“应用程序以 MvvmCross 启动的方式现在变得更加简洁。MvxAppStart 现在由框架统一自动调用。这意味着您可以在 iOS 等平台上安全地删除初始化代码(框架现在还将创建您的关键窗口)。”
现在看不到设置自己的 keywindow 并将其传递给 MvvmCross 的方法,有什么建议吗?
谢谢
尼尔
【问题讨论】:
【参考方案1】:正如您所说,MvvmCross 6 现在负责为您分配 KeyWindow。 其实在阅读MvvmCross 6+的source code时,你可以在FinishedLanchingWithOptions中看到这个:
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
//window is being assigned here by MvvmCross
if (Window == null)
Window = new UIWindow(UIScreen.MainScreen.Bounds);
MvxIosSetupSingleton.EnsureSingletonAvailable(this, Window).EnsureInitialized();
RunAppStart(launchOptions);
FireLifetimeChanged(MvxLifetimeEvent.Launching);
return true;
但是,它们没有为您提供这样做的钩子。为了解决这个问题,我建议重写并执行以下操作:
[Register(nameof(AppDelegate))]
public class AppDelegate : MvxApplicationDelegate<Setup, Core.App>
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
if (Window == null)
Window = new CustomWindow(UIScreen.MainScreen.Bounds);
base.FinishedLaunching(application, launchOptions);
希望对你有帮助
【讨论】:
谢谢@wishmaster,是的,你是对的,我实际上有我自己的版本,以一种更复杂的方式,在你的回复之后,我将它剥离回本质上是公共覆盖 UIWindow Window get ;放; = new AppWindow(UIScreen.MainScreen.Bounds);这与您的相同,但方式略有不同。以上是关于MvvmCross 6 中的子类 UIWindow的主要内容,如果未能解决你的问题,请参考以下文章
在哪里可以将我的应用程序使用的窗口从 UIWindow 更改为我自己的带有情节提要的子类“MyWindow”?
从 UIViewController 方法更改 UIWindow 的呈现视图
MvvmCross 6.4.1 Mvx.IoCProvider.Resolve<IMvxAppStart>() 失败,找不到构造函数