整体规划
BaseController:把viewDidLoad逻辑拆分为三个方法,方便管理。
BaseCommonController:不同项目可以复用的逻辑,例如:设置背景颜色方法等
BaseLogicController:本项目的通用逻辑,主要是创建界面布局容器,例如:快速初始化一个四边都在安全区的垂直方向布局;快速初始化四边都在安全区的TableView布局等。
BaseTitleController:自定义标题相关,例如:快速添加左侧按钮,右侧按钮。
BaseController
//
// BaseController.swift
// MyCloudMusic
//
// Created by jin on 2024/8/19.
//import UIKitclass BaseController: UIViewController {override func viewDidLoad() {super.viewDidLoad()initViews()initDatum()initListeners()}/// 找控件func initViews() {}/// 设置数据func initDatum() {}/// 设置监听器func initListeners() {}}
BaseCommonController
//
// BaseCommonController.swift
// MyCloudMusic
//
// Created by jin on 2024/8/19.
//import UIKitclass BaseCommonController: BaseController {/// 设置背景颜色/// - Parameter color: <#color description#>func setBackgroundColor(_ color:UIColor) {view.backgroundColor = color}}
BaseLogicController
//
// BaseLogicController.swift
// MyCloudMusic
//
// Created by jin on 2024/8/19.
//import UIKit//提供类似Android中更高层级布局框架
import TangramKitclass BaseLogicController: BaseCommonController {/// 根容器var rootContainer: TGBaseLayout!/// 头部容器var superHeaderContainer: TGBaseLayout!var superHeaderContentContainer: TGBaseLayout!/// 容器var container: TGBaseLayout!/// 底部容器var superFooterContainer: TGBaseLayout!var superFooterContentContainer: TGBaseLayout!/// 初始化RelativeLayout容器,四边都在安全区内func initRelativeLayoutSafeArea() {initLinearLayout()//headerinitHeaderContainer()//中间内容容器container = TGRelativeLayout()container.tg_width.equal(.fill)container.tg_height.equal(.fill)container.backgroundColor = .clearrootContainer.addSubview(container)//footerinitFooterContainer()}/// 初始化垂直方向LinearLayout容器func initLinearLayout() {rootContainer = TGLinearLayout(.vert)rootContainer.tg_width.equal(.fill)rootContainer.tg_height.equal(.fill)rootContainer.backgroundColor = .clearview.addSubview(rootContainer)}/// 头部容器,安全区外,一般用来设置头部到安全区外背景颜色func initHeaderContainer() {superHeaderContainer = TGLinearLayout(.vert)superHeaderContainer.tg_width.equal(.fill)superHeaderContainer.tg_height.equal(.wrap)superHeaderContainer.backgroundColor = .clear//头部内容容器,安全区内superHeaderContentContainer = TGLinearLayout(.vert)superHeaderContentContainer.tg_height.equal(.wrap)superHeaderContentContainer.tg_top.equal(TGLayoutPos.tg_safeAreaMargin)superHeaderContentContainer.tg_leading.equal(TGLayoutPos.tg_safeAreaMargin)superHeaderContentContainer.tg_trailing.equal(TGLayoutPos.tg_safeAreaMargin)superHeaderContentContainer.backgroundColor = .clearsuperHeaderContainer.addSubview(superHeaderContentContainer)rootContainer.addSubview(superHeaderContainer)}func initFooterContainer() {superFooterContainer = TGLinearLayout(.vert)superFooterContainer.tg_width.equal(.fill)superFooterContainer.tg_height.equal(.wrap)superFooterContainer.backgroundColor = .clear//底部内容容器,安全区内superFooterContentContainer = TGLinearLayout(.vert)superFooterContentContainer.tg_height.equal(.wrap)superFooterContentContainer.tg_bottom.equal(TGLayoutPos.tg_safeAreaMargin)superFooterContentContainer.tg_leading.equal(TGLayoutPos.tg_safeAreaMargin)superFooterContentContainer.tg_trailing.equal(TGLayoutPos.tg_safeAreaMargin)superFooterContentContainer.backgroundColor = .clearsuperFooterContainer.addSubview(superFooterContentContainer)rootContainer.addSubview(superFooterContainer)}override func initViews() {super.initViews()setBackgroundColor(.colorBackground)}
}
使用
启动界面使用BaseLogicController,因为他不需要标题控制器。
class SplashController: BaseLogicController {override func initViews() {super.initViews()self.initRelativeLayoutSafeArea()...}
}