首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建UITabBarController并将其选项卡与协调器连接?

如何创建UITabBarController并将其选项卡与协调器连接?
EN

Stack Overflow用户
提问于 2017-06-11 01:07:39
回答 1查看 1.8K关注 0票数 4

最近,我学习了MVVM(用于协调员的C语言),现在我正在尝试重写我的当前项目来使用它,但我很难找到如何创建一个选项卡条控制器,其中每个选项卡都有自己的协调器。

我有一个LoginCoordinator,一旦用户登录,它就会创建一个TabCoordinator,它应该创建3个协调器,每个协调一个选项卡。

最明显的解决方案是让协调器的start()函数返回它们创建的视图控制器,所以我猜它看起来有点像这样:

代码语言:javascript
复制
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()函数返回某种感觉是不对的。

EN

回答 1

Stack Overflow用户

发布于 2017-06-12 21:05:32

我觉得通常由父协调器来显示子协调器的控制器,所以我的start()函数是func start(presentationHander: @escaping (UIViewController) -> ())。用于start()TabCoordinator函数如下所示:

代码语言:javascript
复制
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显示它的控制器。

当重用控制器时,我发现这给了我更大的灵活性。父协调器可以选择表示为模态,或将控制器推送到UINavigationController或UITabBarController中。子协调器不应该真正关心添加到其中的上下文。

至于start(),返回控制器或接受闭包,甚至让协调器通过属性公开控制器,我不确定这有多大关系。我选择了一个闭包,因为我希望控制在start()函数期间控制器的视图将被添加到视图层次结构的确切时间。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44479493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档