From acdddbb6708ed650f1ed0297fd1b0e6a4491c693 Mon Sep 17 00:00:00 2001 From: songyc macbook Date: Thu, 9 Jul 2026 04:45:37 +0900 Subject: [PATCH] fix(nav): resolve routing bug when target tab is hidden inside 'More' tab - Fix an issue where navigating to Records via long-press stops at the 'More' tab menu - Update navigation logic to automatically route through the 'More' tab and land directly on the target screen - Ensure action filters are correctly applied when deep-linking to nested tabs --- .../UserInterfaceState.xcuserstate | Bin 22039 -> 22039 bytes myApp/Haru_Danim/IOS/ContentView.swift | 28 +++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/myApp/Haru_Danim/Haru_Danim.xcodeproj/project.xcworkspace/xcuserdata/ceuak.xcuserdatad/UserInterfaceState.xcuserstate b/myApp/Haru_Danim/Haru_Danim.xcodeproj/project.xcworkspace/xcuserdata/ceuak.xcuserdatad/UserInterfaceState.xcuserstate index 9af87546f76bf598db818084b26002078aa12e0a..00527a30604f1c2ff4143a19c82659719f0e2625 100644 GIT binary patch delta 851 zcmX|--AhzK7{=$FGiTi`bywZoGb^c^?ryZB7MkCwg&>lKBz7S|Xk{5n+D$iFbBHXE zSaqz;KA_f{2rq(D6eOZiU3k&O27UYi60Rne*=klc$E>-S;m6GLyw5zLF$j&pBOOu} z;R}3)CHMuuVI3n(aGWs=SrE6C*hvaWGbV7*rgo)&o=Pwd$MY>YC>!};0%gM_Ou-9z zzC=Er!0r5s-23@0ep{Y*BzuoJJfb^)n`m$)imv<&(U`wo82KGy+VxP;9ZBN6mJUPW zzOPn;S(rzuVTi&U5AuO9dJYS`hz|;fJJbIbC7?uPhi|ZgQb%DKzC(-)KFqI=!YcfL zHGYHN=>i1?K$NfZpjh=)TGy0QI;e6+mH(>gKJAyvh|-Ph$~lS4eh-8U z*UmvjVcaXai?hUdjyDeziwvwBS6Y=89f%H!4tSKr!5XpYu#1oA5a8YjiAQ#l@Gnn< zI3y-Xlwa_KHa}0C#I;cnN##Kua>CFiqlRTelZ=W7EZIyh(U@fA;9S$8M2Av7V!F3T zyH;uE$Tc&QlM>q`mgRaf|GT%74(U$LKvaiv9t@LCXwzYz0Kd~1$o*)EGcV4|GP?Fw z*ra=p4!xU=tA)s}7D>a3LepO@l~^XRz0mBWztDwk5LNG+se>Y;G)=rN_L%{PbPyW> zRYNKsV`ZphL;qCLGpP@hnELvX%ZX~2weIL?@xEreQh*AKSk0)SWV$NF-GgPdPqYu( zj26}AwFPZSTh?OQDpjeIx@a~H&>Wga_t0WmO3P^lt)lJpHXWz0XoSwtPjr#S=ufxm zPIi0Ue#28Ys}#Kn%mr2g>kKoMS(%+BGbeK~%670kc7Rp0de+Q3*;&@ZbasjLv3_=q M1=*mnzu}$w2Y>McrT_o{ delta 827 zcmXX^TT4_?7~S9A`#6rbkuvA(Q<{S|rn5Cc8XYw=D%8rT#2%uDvNG&$5x!{c1Kq#} zFI$`JhK>*sJ`^WNu%aR&dgwu+%MU0r%_hsdrM8cH_QS{8XRYi^h3&CD^Xu|R_ z_zizx9H!tOMi{UYM_KKV3JxcYq6t*Dp5tbxcA897mRWmZL{ug`MP8JK(%=QWgjcG* zMqY7MxJ0ZvP2#4wrRr^k*T~(u@8vu919B-oN!IJheQ7B$1V2z>4}6DV z7!l2)MYQ(7DEx%5XcO(CLl(1(k?Kt!Zgh6-C0>xRlX$z(?|@! ztm4cmj%Ii=WNOLbE@VH0C>F&b7sgmai6Kld6+v+$g!-{Vp{K|kBQ0VPTKkO7 zmuE@5ab5IckEYVw9v`!^-?!x+h8wkUHcdXB8Yz_kgtAYg-BUWVg56O)<6m zP=bjGnIag%4yaLWAbq*);*sm3sY^{u4w7ne$OLSHqR}224`I5@1TH#E$P#M?=nCYb ziHifPev~O_EY1c}85wrokm$5t@FGYEn-DOeKy=v3gNjy;k^=buY))zaKdxHs$OP@mXBbSz^42%7? zzgD1Np@Ox3dlOB5xB7F4)-8f2G|SZmE9IMfuN|<>1i27Uvy|d7Otu9U^iLG(Q+i*( z)>i~B$7!dI*EDC!kEKZ@7v)$Jr9Ff&cfP!{y|BDr|D=D>NAyuWtdHqa`iwrS&of|| zY(HycSD0k?*nReh^|5E{4I5-%**Er!%^Aed42Kb8#2N9%G9%f@vOGJ6NZwoDuy4{g x%Mr)i!JRys$MRJ?gXi#E?&kqs!Z-7+yo_(-mHYrd$ItT%youknHtqVL{RimE0FwX! diff --git a/myApp/Haru_Danim/IOS/ContentView.swift b/myApp/Haru_Danim/IOS/ContentView.swift index d2e0b19..e6df3ca 100644 --- a/myApp/Haru_Danim/IOS/ContentView.swift +++ b/myApp/Haru_Danim/IOS/ContentView.swift @@ -90,11 +90,19 @@ final class AppRouter { /// 기록 탭이 열릴 때 적용할 행동 필터 (기록 탭에서 소비 후 nil로 되돌림) var pendingHistoryActionID: PersistentIdentifier? - /// 기록 탭으로 이동하며 행동 필터를 예약. 기록 탭이 노출 탭에 없으면 더보기로 이동. + /// 더보기 탭 내부 내비게이션 경로. 더보기에 숨은 탭으로 바로 진입할 때 라우터가 채워 넣는다. + var morePath: [AppTab] = [] + + /// 기록 탭으로 이동하며 행동 필터를 예약. 기록 탭이 노출 탭에 없으면 더보기 안의 기록 화면까지 바로 진입. func openHistory(filtering actionID: PersistentIdentifier, visibleTabsRaw: String) { pendingHistoryActionID = actionID let visible = AppTab.visibleTabs(from: visibleTabsRaw) - tabSelection = visible.contains(.history) ? AppTab.history.rawValue : AppTab.moreTabValue + if visible.contains(.history) { + tabSelection = AppTab.history.rawValue + } else { + morePath = [.history] + tabSelection = AppTab.moreTabValue + } } } @@ -190,9 +198,12 @@ struct MainTabView: View { } .onAppear { #if DEBUG - // 검증용: -startTab이 노출 탭에 없으면 더보기 대신 그 탭 화면으로 안내되도록 보정 + // 검증용: -startTab이 노출 탭에 없으면 더보기 안의 그 화면까지 바로 진입 let valid = visibleTabs.map(\.rawValue) + [AppTab.moreTabValue] if !valid.contains(router.tabSelection) { + if let hidden = AppTab(rawValue: router.tabSelection) { + router.morePath = [hidden] + } router.tabSelection = AppTab.moreTabValue } #endif @@ -203,14 +214,14 @@ struct MainTabView: View { // MARK: - 더보기 탭 struct MoreTabView: View { + @Environment(AppRouter.self) private var router let tabs: [AppTab] var body: some View { - NavigationStack { + @Bindable var router = router + NavigationStack(path: $router.morePath) { List(tabs) { tab in - NavigationLink { - tab.rootView - } label: { + NavigationLink(value: tab) { Label { Text(tab.label) } icon: { @@ -222,6 +233,9 @@ struct MoreTabView: View { .scrollContentBackground(.hidden) .background(AppTheme.background) .navigationTitle("더보기") + .navigationDestination(for: AppTab.self) { tab in + tab.rootView + } } } }