gpt4 book ai didi

mvvmcross - 为我的 mvvmcross 项目创建自定义演示者

转载 作者:行者123 更新时间:2023-12-01 11:40:53 27 4
gpt4 key购买 nike

我正在使用 mvvmcross 开发一个 iOS 项目。

app navigation应用程序导航是这样的:首先它从初始屏幕 (1) 开始,然后导航到 (2),一个在 3 个选项之间进行选择的 View ,在 View (3) 和 (4) 中你会得到一个列表并且可以导航回到 (2),如果您在 (3) 中选择一个项目,您将以模态方式导航至 (5)。最后,所有导航都在 (6) 中结束,这是一个带有汉堡菜单的 View 。

所以我有传统的导航(带后退按钮)、模态视图和末尾的汉堡菜单。

如果有人可以帮助我或指导我了解如何为此导航方案创建自定义演示者,那就太好了。

我正在使用 MvxModalNavSupportTouchViewPresenter 和 SlidingPanelsNavigationViewController,但是当我从 (2,4,5) 导航到 (6) 时不知道如何交换它们

最佳答案

Presenter 只是实现 https://github.com/MvvmCross/MvvmCross/blob/develop/MvvmCross/Core/Core/Views/IMvxViewPresenter.cs 的东西

public interface IMvxViewPresenter
{
void Show(MvxViewModelRequest request);
void ChangePresentation(MvxPresentationHint hint);
}

这是一个非常简单的界面,它允许像 ViewModels 这样的共享可移植代码请求显示中的更改。

如果您希望通过 Show 请求将整个 UI 从一种显示范例(模态导航 Controller )更改为另一种显示范例(滑动面板),那么实现此目的的一种方法是实现presenter 有两个子 presenter 并且可以简单地切换它们。

在伪代码中,这可能看起来像:

public class MyPresenter : IMvxViewPresenter
{
private IMvxViewPresenter _currentPresenter;

private ModalPresenter _modalPresenter;
private SlidingPresenter _slidingPresenter;

private enum Style
{
Modal, Panels
}

private Style _currentStyle;

public MyPresenter()
{
// do whatever you need to do here to:
// - construct _modalPresenter and _slidingPresenter
// - make _modalPresenter attached to the window (via root view controller)
// - make _slidingPresenter hidden/unattached

_currentStyle = Style.Modal;
_currentPresenter = _modalPresenter;
}


public void Show(MvxViewModelRequest request)
{
if (_currentStyle == Style.Modal &&
request.ViewModelType == typeof(WhateverViewModelIndicatesTheSwitchIsNeeded))
{
DoSwitch(request);
return;
}

_currentPresenter.Show(request);
}

public void ChangePresentation(MvxPresentationHint hint)
{
_currentPresenter.ChangePresentation(hint);
}

private void DoSwitch(MvxViewModelRequest request)
{
// do whatever is necessary to:
// - remove _modalPresenter from the window
// - add _panelPresenter to the window
// - show `request` within _panelPresenter

_currentPresenter = _panelPresenter;
_currentStyle = Style.Panelsl
}
}

显然,在此伪代码中需要填写一些细节 - 例如有一些 View Controller 要从窗口中添加和删除——但这只是标准的 iOS 操作——例如看到很多问题和答案,例如 Changing root view controller of a iOS WindowChange rootViewController from uiviewcontroller to uinavigationcontroller

关于mvvmcross - 为我的 mvvmcross 项目创建自定义演示者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20994859/

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