- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我最近受到启发学习 MVVM-C(C 代表协调器),现在我正在尝试重写我当前的项目以使用它,但我正在努力弄清楚如何创建标签栏 Controller ,每个选项卡都有自己的协调器。
我有一个 LoginCoordinator
,一旦用户登录,它就会创建一个 TabCoordinator
,应该创建 3 个协调器,每个协调器协调一个选项卡。
最明显的解决方案是让协调器的 start()
函数返回他们创建的 View Controller ,所以我想它看起来有点像这样:
class TabCoordinator {
func start() {
let fooCoordinator = FooCoordinator(...)
let fooVC = fooCoordinator.start()
// create other coordinators/VCs
tabBarController.viewControllers = [fooVC, ...]
}
}
class FooCoordinator {
func start() -> UIViewController {
let fooVC = FooViewController(...)
// ...
return fooVC
}
}
我不确定我是否在正确的轨道上,或者是否有更好的方法,但是让 start()
函数返回一些东西感觉有点不对劲......
最佳答案
我觉得呈现子协调器的 Controller 通常是父协调器的工作,所以我的 start()
函数是 func start(presentationHander: @escaping (UIViewController) -> ())
。 TabCoordinator
的 start()
函数看起来像这样:
class TabCoordinator : Coordinator {
func start(presentationHander: @escaping (UIViewController) -> ()) {
let tabBarController = UITabBarController()
var tabBarControllers = [UIViewController]()
let fooCoordinator = FooCoordinator()
fooCoordinator.start { (controller) in
tabBarControllers.append(controller)
}
tabBarController.viewControllers = tabBarControllers
presentationHander(tabBarController)
}
}
class FooCoordinator : Coordinator {
func start(presentationHander: @escaping (UIViewController) -> ()) {
let fooVC = FooViewController.makeFromStoryboard()
presentationHander(settingVC)
}
}
FooCoordinator 负责初始化它自己的依赖项,但允许 TabCoordinator 呈现它的 Controller 。
我发现这让我在重用 Controller 时更加灵活。父协调器可以选择以模式呈现或将 Controller 推送到 UINavigationController 或 UITabBarController 中。子协调器不应该真正关心它被添加到的上下文。
至于 start()
返回 Controller 或接受闭包,甚至让协调器通过属性公开 Controller ,我不确定它是否重要。我选择了一个闭包,因为我想控制在 start()
函数期间 Controller 的 View 将被添加到 View 层次结构中的确切时间。
关于ios - 如何创建 UITabBarController 并将其选项卡与协调器连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44479493/
我正在尝试执行 vagrant up 但一直遇到此错误: ==> default: IOError: [Errno 13] Permission denied: '/usr/local/lib/pyt
我在容器 div 中有一系列动态创建的不同高度的 div。 Varying text... Varying text... Varying text... Varying text.
通过 cygwin 运行 vagrant up 时遇到以下错误。 stderr: /bin/bash: /home/vagrant/.ansible/tmp/ansible-tmp-14872260
今天要向小伙伴们介绍的是一个能够快速地把数据制作成可视化、交互页面的 Python 框架:Streamlit,分分钟让你的数据动起来! 犹记得我在做机器学习和数据分析方面的毕设时,
我是 vagrant 的新手,正在尝试将第二个磁盘添加到我正在用 vagrant 制作的虚拟机中。 我想出了如何在第一次启动虚拟机时连接磁盘,但是当我关闭机器时 然后再次备份(使用 'vagrant
我是一名优秀的程序员,十分优秀!