From c6fc4e3065d750e23a6fb7c51317724a038984d7 Mon Sep 17 00:00:00 2001 From: lynnswap <65545348+lynnswap@users.noreply.github.com> Date: Fri, 6 Feb 2026 04:28:51 +0900 Subject: [PATCH] refactor: demo preview cleanup --- .../TabBarDemo/TabBarDemo/ContentView.swift | 15 ++++----- Sources/TabBarMenu/TabBarMenu.swift | 3 +- Sources/TabBarMenu/TabBarMenuRequests.swift | 32 ------------------- .../TabBarMenuPreview.swift | 31 +++++++++--------- 4 files changed, 24 insertions(+), 57 deletions(-) diff --git a/Examples/TabBarDemo/TabBarDemo/ContentView.swift b/Examples/TabBarDemo/TabBarDemo/ContentView.swift index 02dcd57..a3ff709 100644 --- a/Examples/TabBarDemo/TabBarDemo/ContentView.swift +++ b/Examples/TabBarDemo/TabBarDemo/ContentView.swift @@ -9,24 +9,23 @@ import SwiftUI import TabBarMenuDemoSupport struct ContentView: View { - @AppStorage("selectedTab") private var mode :TabBarMenuPreviewMode = .uiTab + @AppStorage("selectedTab") private var mode: TabBarMenuPreviewMode = .uiTab + var body: some View { - NavigationStack{ + NavigationStack { TabBarMenuPreviewScreen(mode: mode) - .toolbar{ + .toolbar { ToolbarItem(placement: .principal) { modePicker } } } } - @ViewBuilder - private var modePicker:some View{ - Picker(selection:$mode){ + + private var modePicker: some View { + Picker("Mode", selection: $mode) { Text("UITab").tag(TabBarMenuPreviewMode.uiTab) Text("VC").tag(TabBarMenuPreviewMode.uiTabBarItem) - }label:{ - EmptyView() } .pickerStyle(.segmented) .labelsHidden() diff --git a/Sources/TabBarMenu/TabBarMenu.swift b/Sources/TabBarMenu/TabBarMenu.swift index d33725f..d79a7c6 100644 --- a/Sources/TabBarMenu/TabBarMenu.swift +++ b/Sources/TabBarMenu/TabBarMenu.swift @@ -1,8 +1,7 @@ // The Swift Programming Language // https://docs.swift.org/swift-book -import SwiftUI -import Observation +import UIKit import ObjectiveC diff --git a/Sources/TabBarMenu/TabBarMenuRequests.swift b/Sources/TabBarMenu/TabBarMenuRequests.swift index 03c2a2d..387c2a7 100644 --- a/Sources/TabBarMenu/TabBarMenuRequests.swift +++ b/Sources/TabBarMenu/TabBarMenuRequests.swift @@ -92,18 +92,6 @@ struct TabBarMenuTabRequestContext: TabBarMenuRequestContext { func items(in tabBarController: UITabBarController) -> [UITab] { tabBarController.tabs } - - fileprivate func isMoreTab(_ tab: UITab, in tabBarController: UITabBarController) -> Bool { - let tabs = tabBarController.tabs - guard let moreIndex = core.moreTabStartIndex(totalCount: tabs.count) else { - return false - } - if let index = tabs.firstIndex(where: { $0 === tab }) { - return index == moreIndex - } - // If we can't find it, be conservative and treat it as the More tab. - return true - } } @MainActor @@ -113,26 +101,6 @@ struct TabBarMenuViewControllerRequestContext: TabBarMenuRequestContext { func items(in tabBarController: UITabBarController) -> [UIViewController] { tabBarController.viewControllers ?? [] } - - fileprivate func isMoreViewController( - _ viewController: UIViewController, - in tabBarController: UITabBarController - ) -> Bool { - let moreNavigationController = tabBarController.moreNavigationController - if viewController === moreNavigationController { - return true - } - if viewController.tabBarItem === moreNavigationController.tabBarItem { - return true - } - let totalCount = items(in: tabBarController).count - guard let moreIndex = core.moreTabStartIndex(totalCount: totalCount), - let items = tabBarController.tabBar.items, - items.indices.contains(moreIndex) else { - return false - } - return viewController.tabBarItem === items[moreIndex] - } } @MainActor diff --git a/Sources/TabBarMenuDemoSupport/TabBarMenuPreview.swift b/Sources/TabBarMenuDemoSupport/TabBarMenuPreview.swift index 4f39f47..58bd121 100644 --- a/Sources/TabBarMenuDemoSupport/TabBarMenuPreview.swift +++ b/Sources/TabBarMenuDemoSupport/TabBarMenuPreview.swift @@ -1,5 +1,5 @@ -import SwiftUI import Observation +import SwiftUI import TabBarMenu private struct PreviewTab: Equatable { @@ -249,10 +249,10 @@ private final class TabBarMenuPreviewUITabController: TabBarMenuPreviewBaseContr let actions = tabs.map { tab in let title = tab.title.isEmpty ? "Untitled" : tab.title return UIAction(title: title, image: tab.image) { [weak tab] _ in - guard let tab ,let tabBarController = tab.tabBarController else { + guard let tab, let tabBarController = tab.tabBarController else { return } - if !tabBarController.moreNavigationController.navigationBar.isHidden{ + if !tabBarController.moreNavigationController.navigationBar.isHidden { tabBarController.moreNavigationController.navigationBar.isHidden = true } tabBarController.selectedTab = tab @@ -300,7 +300,7 @@ private final class TabBarMenuPreviewViewControllerController: TabBarMenuPreview guard let viewController, let tabBarController = viewController.tabBarController else { return } - if !tabBarController.moreNavigationController.navigationBar.isHidden{ + if !tabBarController.moreNavigationController.navigationBar.isHidden { tabBarController.moreNavigationController.navigationBar.isHidden = true } tabBarController.selectedViewController = viewController @@ -337,16 +337,17 @@ private struct SampleTabView: View { let systemImage: String var body: some View { - ContentUnavailableView{ - Label{ + ContentUnavailableView { + Label { Text(title) - }icon:{ + } icon: { Image(systemName: systemImage) .symbolVariant(.fill) } } } } + private struct TabBarMenuPreviewRepresentable: UIViewControllerRepresentable { let mode: TabBarMenuPreviewMode let viewModel: TabBarMenuPreviewViewModel @@ -358,11 +359,14 @@ private struct TabBarMenuPreviewRepresentable: UIViewControllerRepresentable { return container } - func updateUIViewController(_ uiViewController: TabBarMenuPreviewContainerController, context: Context) {} + func updateUIViewController(_ uiViewController: TabBarMenuPreviewContainerController, context: Context) { + viewModel.register(uiViewController) + viewModel.updateMode(mode) + } } public struct TabBarMenuPreviewScreen: View { - private var mode: TabBarMenuPreviewMode + private let mode: TabBarMenuPreviewMode @State private var viewModel = TabBarMenuPreviewViewModel() public init(mode: TabBarMenuPreviewMode) { @@ -372,7 +376,7 @@ public struct TabBarMenuPreviewScreen: View { public var body: some View { TabBarMenuPreviewRepresentable(mode: mode, viewModel: viewModel) .ignoresSafeArea() - .toolbar{ + .toolbar { ToolbarItem(placement: .navigation) { Toggle("Search Tab", isOn: Bindable(viewModel).isSearchTabEnabled) } @@ -382,21 +386,18 @@ public struct TabBarMenuPreviewScreen: View { } } } - .onChange(of: mode) { - viewModel.updateMode(mode) - } } } #if DEBUG #Preview("TabBarMenu UITab") { - NavigationStack{ + NavigationStack { TabBarMenuPreviewScreen(mode: .uiTab) } } #Preview("TabBarMenu UITabBarItem") { - NavigationStack{ + NavigationStack { TabBarMenuPreviewScreen(mode: .uiTabBarItem) } }