如何在 MvvmCross 中指定要作为 Modal 推送的视图?

2024-03-18

我在使用 MvvmCross 框架的 MonoTouch 应用程序中有一个视图,我希望显示模态(NavigationController.PresentModalViewController)。


MvvmCross 的前提是所有 ViewModel 都只是“普通页面”——因此在 iOS/MonoTouch 中,这意味着使用 UINavigationController 呈现 UIViewController。

要摆脱这个前提 - 转向选项卡式显示、模式显示、拆分控制器、弹出窗口等 - 那么您可以在 MonoTouch 应用程序中调整 Presenter 逻辑。

演示者的工作是实现:

public interface IMvxTouchViewPresenter
{
    void Show(MvxShowViewModelRequest view);
    void Close(IMvxViewModel viewModel);
    void CloseModalViewController();
    void ClearBackStack();
    bool PresentModalViewController(UIViewController controller, bool animated);
    void NativeModalViewControllerDisappearedOnItsOwn();
}

用于您的应用程序的演示者是在 AppDelegate 构造中选择的 - 例如看看如何推特搜索 https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20TwitterSearch/TwitterSearch.UI.Touch/AppDelegate.cs为 iPhone 和 iPad 构建不同的演示器。


幸运的是,对于简单的模态支持,可用的标准演示器之一是MvxModalSupportTouchViewPresenter.cs https://github.com/slodge/MvvmCross/blob/master/Cirrious/Cirrious.MvvmCross/Touch/Views/Presenters/MvxModalSupportTouchViewPresenter.cs

该演示者查看所呈现的视图是否具有IMvxModalTouchView标记接口 - 它测试view is IMvxModalTouchView。如果存在此界面,则它使用视图的模式呈现而不是“正常导航”。

要使用它,请将您的 AppDelegate 代码更改为:

    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        window = new UIWindow(UIScreen.MainScreen.Bounds);

        // initialize app for single screen iPhone display
        var presenter = new MvxModalSupportTouchViewPresenter(this, window);
        var setup = new Setup(this, presenter);
        setup.Initialize();

        // start the app
        var start = this.GetService<IMvxStartNavigation>();
        start.Start();

        window.MakeKeyAndVisible();

        return true;
    } 

然后将标记界面添加到您的模态视图中:

 public class MyView : MvxBindingTouchViewController<MyViewModel>, IMvxModalTouchView
 {
      // ....
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 MvvmCross 中指定要作为 Modal 推送的视图? 的相关文章

  • PCL 上的 TPL,适用于 PCL 配置文件 78 的 MvvmCross

    尝试使用PCL for mvvmcross通过 Profile 78 与 TPL 合作 关于问题mvvmcross 的 PCL 上的 TPL https stackoverflow com questions 16914738 tpl on
  • 在 Xamarin Forms for iOS 上向编辑器底部添加边框

    目前 我的 Xamarin 表单应用程序中有输入字段 这些输入字段在 iOS 上只有底部边框 可以使用以下自定义渲染器完美运行 using Xamarin Forms Platform iOS using Xamarin Forms usi
  • MonoTouch 和 Xcode 4

    既然 Xcode 4 GM 种子已经发布 MonoDevelop 最终会以某种方式与其交互以进行 XIB 编辑吗 我目前正在将每个 XIB 上的 打开方式 手动设置为旧的 Interface Builder 但是这样做有两个问题 我必须记住
  • Monotouch/WCF:为什么无法覆盖wcf绑定超时设置

    Monotouch WCF 为什么无法覆盖 wcf 绑定默认超时设置 public class MyServiceClient ClientBase
  • Xamarin Forms iOS 错误任务图标

    我认为有一个非常简单的问题 但我不太确定我是否做错了什么或者这是否是 Xamarin 问题 我有一个 iOS Xamarin Forms 项目 在该项目中 我无法设置按两次主页按钮时显示在 任务 视图中的 任务 图标 它始终显示 xamar
  • NSLocationWhenInUseUsageDescription 的 Xamarin.iOS 本地化

    有没有办法本地化NSLocationWhenInUseUsageDescription in Info plist在 Xamarin 工作室中 或者是否有可能将完整的内容本地化Info plist也将是一个解决方案 我尝试了以下步骤 因为它
  • 无效的可执行文件大小 - 来自 iTunes Connect

    我正在 iTunes 上上传我的 iOS 应用程序 我正在使用 MonoTouch 编译 iOS 版 LibGdx 游戏 在 Android 中几乎不到 7 8mb 但是当我上传到 iTunes AppStore 时 它 的大小就变成了 7
  • MVVMCross for Touch 支持双向绑定吗? (除了 UITextFields)

    我正在研究为什么我的 2 路绑定无法使用 MVVMCross 进行 iOS 开发 我正在使用 UITextViews 嵌入 tableView 的自定义单元格中 我看过这个问题 如何使用 mvvmcross 双向绑定到 UITextView
  • X.iOS Cycle7 似乎破坏了 SSL

    昨天我在 Beta 通道中将 XS 更新为 RC 版本 即 Cycle7 现在我在使用 iOS 连接到 HTTPS 连接时遇到问题 错误 Error SecureChannelFailure The authentication or de
  • 是否可以在 Monotouch 中使用 NSZombieEnabled?

    我一直在阅读有关环境变量的信息NSZombieEnabled http www cocoadev com index pl NSZombieEnabled我想知道目前是否可以在 Monotouch 运行时中使用它 如果没有 是否有合适的替代
  • MvvmCross 和 Xcode 故事板

    mvvmcross v3 支持情节提要 xcode 吗 If yes how There is an example Thanks MvvmCross 不太适合故事板 原因是故事板中有一些逻辑 例如Segue导航 它真正属于 MvvmCro
  • 为什么我们的 MonoTouch 应用程序会破坏垃圾收集器?并不是内存不足

    我们的问题很简单 但原因却很复杂 我们是经验丰富的开发人员 并且对可能导致此问题的原因进行了大量研究 我们希望 MonoTouch 开发人员能够与我们合作 找出人们所遇到的常见问题 以及目前尚无解决方案的问题 我们已经为此工作了两个多星期
  • 来自 MDTool 的 .IPA 文件

    如何让 MDTool 为我的 MonoTouch 项目创建 IPA 文件 当我从 MonoDevelop GUI 应用程序中构建时 会创建 IPA 文件 But mdtool build configuration AppStore iPh
  • MVVMCross 以编程方式更改启动 ViewModel

    可移植类库定义了启动视图模型 这种情况听起来不错 但我正在考虑这一点 您编写了一个 iOS 通用应用程序或 Android 需要更改其开始屏幕 视图模型 如果应用程序是手机 则默认视图模型是登录 但如果应用程序是平板电脑 则需要不同的视图模
  • ViewModel 和 Service 类的实例化

    我试图理解 ViewModel 和 Service 类的实例化 并将其写下来供其他人使用 请在需要的地方更正 添加 ViewModel 和服务的实例化并不是以最常见的方式完成的 这是使用反射完成的 在 TipCalc 中 您有 public
  • Xamarin.UITest:如何检索列表中的所有元素

    我有一个包含 500 个元素的列表 当我使用app Query在页面上 Xamarin UITest 只给了我 6 个元素 因为 UI 中只有 6 个元素可见 如何从 UITest 内的列表中检索所有 500 个元素 如上所述 预期行为ap
  • 使用 HttpClient 的 Xamarin.iOS 项目出现“操作无效”错误

    我创建 HttpClient 并在按钮单击处理程序中调用 GetStringAsync 方法 var client new HttpClient var response await client GetStringAsync http g
  • 添加UITabBarController并且没有NavigationController

    由于我是 Xamarin IOS 的新手 我想问一个问题 我已经关注了这个例子 https developer xamarin com guides ios user interface controls creating tabbed a
  • 编辑和导入故事板更改从 Xcode 到 Visual Studio

    我正在将代码从 Xamarin Studio Mac 移动到 Visual Studio 我可以从 Xamarin Studio 在 Xcode 中打开故事板文件 如果我在 Xcode 中进行更改 关闭它 然后在 Xamarin Studi
  • Xamarin Forms WebView 打开外部链接

    我的应用程序中有一个网络视图 当单击外部链接 在普通浏览器中在新选项卡中打开 时 我无法返回我的网站 当打开一个新标签时 有可能像 Gmail 一样关闭该标签的菜单吗 目的是 每当单击链接时 用户都可以选择使用哪个选项来查看内容 例如单击链

随机推荐