问题标签 [coordinator-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
980 浏览

ios - 在 MVVM-C 中的 ViewModel 之间传递数据

我正在使用 MVVM 和 Coordinator 来设计应用程序。我怀疑的一件事是如何在不同的ViewModels. 通常,前一个 viewModel 只会创建下一个 viewModel,并且只会在prepareforsegue. 但是,既然我负责所​​有导航,我该如何实现呢?

我当然可以创建ViewModelfor CreateAccountViewControllerinMainViewModel并将 theViewModel作为参数传递给createAccount方法,但在这里这样做是正确的方法吗?这里的单元测试含义是什么?

0 投票
1 回答
250 浏览

ios - Swift 将项目重构为 MVVM-C

所以我正在尝试从 MMVM 重构现有项目并添加协调器。我有以下课程:

在 appDelegate 我做如下:

VC是:

}

扩展 ViewController: GenreViewModelDelegate { func didfinish(succsess: Bool) { MBProgressHUD.hide(for: self.view, animated: true) if succsess { self.collectionView.reloadData() } else { let action = UIAlertAction(title: "再试一次",样式:.default,处理程序:{ (action) in self.getData() }) Alerts.showAlert(vc: self, action: action) } } }

扩展 ViewController: UICollectionViewDelegateFlowLayout { func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return CGSize(width: 100, height: 100) } }

扩展视图控制器:UICollectionViewDataSource {

}

虚拟机是:

问题是,当我试图将 viewModel 注入 ViewController 并在 start 函数中将其推送时,它将不起作用——当 viewDidLoad 在 VC 中调用 viewModel 时为零。

0 投票
0 回答
211 浏览

swift - 展开时 window.rootViewController nil

我想通过使用文件在我的 Swift 项目中使用 Coordinator Navigator(),但我需要将UINavigationController内部传递给navigator.show().

问题是 XCode 显示此错误:

应用委托

如何将其window.rootViewController! as! UINavigationController 作为非可选值传递?

0 投票
1 回答
179 浏览

ios - 阻止 iOS 应用加载默认 Storyboard 入口点

我正在关注协调器模式的本教程,到目前为止,我已经完成了创建协调器并从应用程序委托运行 start() 的过程。但是随后在该协调器上调用函数不起作用,因为突然协调器 var 为零。似乎显示的初始视图控制器不是来自 coordinator.start() 的控制器,而是来自故事板入口点的控制器。我确实在项目目标的主界面中禁用了 Main。

应用委托:

主要协调人:

初始化视图控制器(故事板中最初的那个,但我用协调器展示它):

Storyboarded 协议 - 用于通过 id 将视图控制器从情节提要中取出:

0 投票
0 回答
390 浏览

swift - 快速解除协调器模式中的控制器的最佳方法

我正在研究从这里开始的协调器模式,但由于可能存在内存泄漏,我不了解从控制器中的通用按钮中解散的更安全方法(“后退”按钮的机制可以)。

例如,我到达 ViewController2,做我的事情,然后点击一个按钮(除了导航栏中的后退按钮之外的任何人)如何正确关闭?经典有问题popViewController吗?还是在“MyCoordinatorClass”中更好地实现这样的功能??deinit似乎总是正确调用,但我不确定哪个更好。另外,我一直使用推送,但它也可以在当前模式下使用,有什么可能的问题吗?欢迎任何帮助或澄清

我的协调员协议

我的故事板协议

我的 MainCoordinatorClass

0 投票
1 回答
206 浏览

ios - coordinator 是 nil 并且没有在按钮点击时导航到下一个屏幕

我一直在尝试重构我的源代码,使其符合协调器模式。我已用作UITabBarController我的应用程序的父视图控制器,其中包含 4 个视图控制器。

我一直在关注如何为 iOS 应用程序实现协调器模式的教程,并且我已经创建并设置了协调器的协议和类。我的 viewController 中有一个按钮(TabbarViewController 的子 viewController),但是,在单击按钮时,协调器没有推送/导航到所需的 VC,并且我看到协调器nil在通过 调试时返回调试控制台breakpoint,并且我无法弄清楚如何解决此问题。

MainCoordinator.swift:

SubCoordinator.swift:

StoryBoarded.swift

FirstViewController.Swift:

ViewController.swift:

start()正在调用,并且 splashVC 出现并MainViewontroller在完成时更新 rootViewController,但是导航在按钮单击事件上根本不起作用。

任何反馈或帮助将不胜感激!

0 投票
0 回答
69 浏览

ios - 使用 Coordinator 设计模式在 ViewControllers 之间传递数据(没有 prepareForSegue)

我的项目采用 MVVM 架构构建,我使用 Coordinator 设计模式来处理导航(全部以编程方式,不涉及 Storyboard)。

它由几个 TableViewController 组成,其中包含用户、相册、照片、帖子和评论,每个都有自己的 TableViewController。在每个用户单元格中,您都可以访问其相册和帖子。选择相册或帖子,您可以查看更多详细信息等...

我从 {JSON} Placeholder API 获取数据并将其显示在表视图上,但似乎无法将数据从第一个传递到下一个。由于我正在使用导航控制器,并且没有转场,因此prepare(for segue:)在从一个视图导航到另一个视图之前,我不能使用设置下一个表视图。

我通过函数触发导航,didTapAlbums(with userId: Int, by name: String)didTapPosts(with userId: Int, by name: String)调用我的 Coordinator 协议中的方法eventOcurred(with: Event)设置,将下一个 TableViewController 推入 NavigationController。

这是我的主要协调员课程:

这是第一个 TableViewController,它显示用户:

我要做的就是将值传递给userIdname一个控制器。

编辑:协调器和协调协议