我正在编写一个具有基于TabBar的导航的应用程序。我正在采用VIPER架构,但我对如何实现UITabBarController选项卡更改的主题感到困惑。
答案 0 :(得分:17)
这可能会迟到,但对其他人可能会有所帮助。 我的用例是在登录屏幕后实现tabBarController。 我们可以通过很多方式在VIPER中完成这项工作,但我如何做到如下:
希望我有道理。
答案 1 :(得分:5)
使用VIPER架构实现UITabBarController
的另一种方法是提供TabBarInterface
import Foundation
import UIKit
protocol TabBarInterface {
func configuredViewController() -> UIViewController
}
因此,在标签栏控制器中显示视图控制器的每个线框都会实现TabBarInterface
,然后installIntoWindow
只会循环遍历所有线框,为每个线框调用configuredViewController
。< / p>
import Foundation
import UIKit
class TabBarWireframe : NSObject {
let wireFrames:[TabBarInterface]
var rootWireframe : RootWireframe?
init(_ wireFrames:TabBarInterface...) {
self.wireFrames = wireFrames
super.init()
}
private override init() {
self.wireFrames = [TabBarInterface]()
}
func installIntoWindow(window: UIWindow) {
let tabBarController = MainTabBarController()
var viewControllers = [UIViewController]()
for wireFrame in wireFrames {
viewControllers.append(wireFrame.configuredViewController())
}
tabBarController.viewControllers = viewControllers
tabBarController.navigationItem.title = "Visva"
self.rootWireframe?.installTabBarControllerIntoWindow(tabBarController: tabBarController, window: window)
}
}
请注意,在我们的情况下RootWireframe
将标签栏控制器安装到主窗口中,即:
window.rootViewController = tabBarController
window.makeKeyAndVisible()
答案 2 :(得分:2)
我还是VIPER的新手,所以我的两分钱可能不值得多,但可能会将tabbar作为AppDelegate上的私人财产。当您需要更改为特定索引时,可以使用实用程序方法更改tabbar选择的索引,但也会触发线框/路由器创建过程。