File tree Expand file tree Collapse file tree
Core/Core/TabLinkNavigator Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -63,10 +63,10 @@ extension TabNavigationBuilder {
6363 }
6464
6565 public func lastPick( controller: UINavigationController ? , item: LinkItem ) -> RouteViewController ? {
66- guard let controller, let first = item. pathList. first else { return . none }
66+ guard let controller, let last = item. pathList. last else { return . none }
6767 return controller. viewControllers
6868 . compactMap { $0 as? RouteViewController }
69- . last ( where: { $0. matchPath == first } )
69+ . last ( where: { $0. matchPath == last } )
7070 }
7171
7272 public func exceptFilter(
@@ -78,4 +78,10 @@ extension TabNavigationBuilder {
7878 . filter { !item. pathList. contains ( $0. matchPath) }
7979 }
8080
81+ public func isContainSequence( item: LinkItem ) -> Bool {
82+ let currentPathJoin = routeBuilderList. map { $0. matchPath } . joined ( separator: " , " )
83+ let itemPathJoin = item. pathList. joined ( separator: " , " )
84+
85+ return currentPathJoin. contains ( itemPathJoin)
86+ }
8187}
Original file line number Diff line number Diff line change @@ -158,8 +158,6 @@ extension TabLinkNavigator {
158158 NotificationCenter . default
159159 . post ( name: TabbarEventNotification . onSelectedTab, object: targetPath)
160160 }
161-
162- public func reload( items _: LinkItem , isAnimated _: Bool ) { }
163161}
164162
165163extension UINavigationController {
Original file line number Diff line number Diff line change @@ -100,24 +100,24 @@ extension TabPartialNavigator: TabLinkNavigatorProtocol {
100100 }
101101
102102 public func backOrNext( linkItem: LinkItem , isAnimated: Bool ) {
103- guard
104- let pick = navigationBuilder. firstPick (
105- controller: currentController,
106- item: linkItem)
107- else { return }
108-
103+ guard navigationBuilder. isContainSequence ( item: linkItem) ,
104+ let pick = navigationBuilder. lastPick (
105+ controller: currentController,
106+ item: linkItem) else {
107+ currentController? . merge ( new: navigationBuilder. build ( item: linkItem) , isAnimated: isAnimated)
108+ return
109+ }
109110 currentController? . popToViewController ( pick, animated: isAnimated)
110111 }
111112
112113 public func rootBackOrNext( linkItem: LinkItem , isAnimated: Bool ) {
113- guard
114- let pick = navigationBuilder. firstPick (
115- controller: currentController ,
116- item: linkItem)
117- else {
114+ guard navigationBuilder . isContainSequence ( item : linkItem ) ,
115+ let pick = navigationBuilder. lastPick (
116+ controller: rootController ,
117+ item: linkItem) else {
118+ rootController . merge ( new : navigationBuilder . build ( item : linkItem ) , isAnimated : isAnimated )
118119 return
119120 }
120-
121121 rootController. popToViewController ( pick, animated: isAnimated)
122122 }
123123
You can’t perform that action at this time.
0 commit comments