Use a system scan tab slot with MainScanTabItem interception so scanner presentation no longer depends on CYL PlusButton, and remove the CYLTabBarController pod dependency. Co-authored-by: Cursor <cursoragent@cursor.com>
87 lines
2.2 KiB
Swift
87 lines
2.2 KiB
Swift
//
|
||
// AppTab.swift
|
||
// suixinkan
|
||
//
|
||
// Created by Codex on 2026/6/18.
|
||
//
|
||
|
||
import UIKit
|
||
|
||
/// 主 Tab 实体,描述底部导航中的每一个一级入口。
|
||
enum AppTab: String, CaseIterable, Identifiable, Hashable {
|
||
case home
|
||
case orders
|
||
case statistics
|
||
case profile
|
||
|
||
var id: Self { self }
|
||
|
||
var title: String {
|
||
switch self {
|
||
case .home:
|
||
"首页"
|
||
case .orders:
|
||
"订单"
|
||
case .statistics:
|
||
"数据"
|
||
case .profile:
|
||
"我的"
|
||
}
|
||
}
|
||
|
||
/// 选中态 TabBar 图标资源名。
|
||
var selectedImageName: String {
|
||
switch self {
|
||
case .home:
|
||
"tab_home_selected"
|
||
case .orders:
|
||
"tab_order_selected"
|
||
case .statistics:
|
||
"tab_data_selected"
|
||
case .profile:
|
||
"tab_profile_selected"
|
||
}
|
||
}
|
||
|
||
/// 未选中态 TabBar 图标资源名。
|
||
var unselectedImageName: String {
|
||
switch self {
|
||
case .home:
|
||
"tab_home_unselected"
|
||
case .orders:
|
||
"tab_order_unselected"
|
||
case .statistics:
|
||
"tab_data_unselected"
|
||
case .profile:
|
||
"tab_profile_unselected"
|
||
}
|
||
}
|
||
|
||
/// 构建系统 TabBarItem,供 `UITabBarController` 使用。
|
||
func makeTabBarItem() -> UITabBarItem {
|
||
let unselectedImage = UIImage(named: unselectedImageName)?.withRenderingMode(.alwaysOriginal)
|
||
let selectedImage = UIImage(named: selectedImageName)?.withRenderingMode(.alwaysOriginal)
|
||
let item = UITabBarItem(
|
||
title: title,
|
||
image: unselectedImage,
|
||
selectedImage: selectedImage
|
||
)
|
||
item.accessibilityIdentifier = "main.tab.\(rawValue)"
|
||
return item
|
||
}
|
||
|
||
/// 构建 Tab 根页面 ViewController。
|
||
func makeRootViewController(services: AppServices) -> UIViewController {
|
||
switch self {
|
||
case .home:
|
||
return HomeViewController()
|
||
case .orders:
|
||
return OrdersViewController()
|
||
case .statistics:
|
||
return StatisticsViewController()
|
||
case .profile:
|
||
return ProfileViewController()
|
||
}
|
||
}
|
||
}
|