Commit 41139013 by Orkhan Alikhanov

Fix delegations never fired on tab swipe

parent 87ac65d4
...@@ -374,10 +374,10 @@ fileprivate extension TabsController { ...@@ -374,10 +374,10 @@ fileprivate extension TabsController {
switch swipeGesture.direction { switch swipeGesture.direction {
case .right: case .right:
guard (selectedIndex - 1) >= 0 else { return } guard (selectedIndex - 1) >= 0 else { return }
select(at: selectedIndex - 1) internalSelect(at: selectedIndex - 1, isTriggeredByUserInteraction: true)
case .left: case .left:
guard (selectedIndex + 1) < viewControllers.count else { return } guard (selectedIndex + 1) < viewControllers.count else { return }
select(at: selectedIndex + 1) internalSelect(at: selectedIndex + 1, isTriggeredByUserInteraction: true)
default: default:
break break
} }
...@@ -391,10 +391,26 @@ extension TabsController { ...@@ -391,10 +391,26 @@ extension TabsController {
- Parameter at index: An Int. - Parameter at index: An Int.
*/ */
open func select(at index: Int) { open func select(at index: Int) {
internalSelect(at: index, isTriggeredByUserInteraction: false)
}
/**
Transitions to the view controller that is at the given index.
- Parameter at index: An Int.
- Parameter isTriggeredByUserInteraction: A boolean indicating whether the
state was changed by a user interaction, true if yes, false otherwise.
*/
private func internalSelect(at index: Int, isTriggeredByUserInteraction: Bool) {
guard index != selectedIndex else { guard index != selectedIndex else {
return return
} }
if isTriggeredByUserInteraction {
guard !(false == delegate?.tabsController?(tabsController: self, shouldSelect: viewControllers[index])) else {
return
}
}
Motion.async { [weak self] in Motion.async { [weak self] in
guard let s = self else { guard let s = self else {
return return
...@@ -402,7 +418,7 @@ extension TabsController { ...@@ -402,7 +418,7 @@ extension TabsController {
s.tabBar.select(at: index) s.tabBar.select(at: index)
s.transition(to: s.viewControllers[index], isTriggeredByUserInteraction: false) { [weak self] (isFinishing) in s.transition(to: s.viewControllers[index], isTriggeredByUserInteraction: isTriggeredByUserInteraction) { [weak self] (isFinishing) in
guard isFinishing else { guard isFinishing else {
return return
} }
...@@ -424,20 +440,6 @@ extension TabsController: TabBarDelegate, _TabBarDelegate { ...@@ -424,20 +440,6 @@ extension TabsController: TabBarDelegate, _TabBarDelegate {
return return
} }
guard i != selectedIndex else { internalSelect(at: i, isTriggeredByUserInteraction: true)
return
}
guard !(false == delegate?.tabsController?(tabsController: self, shouldSelect: viewControllers[i])) else {
return
}
transition(to: viewControllers[i], isTriggeredByUserInteraction: true) { [weak self] (isFinishing) in
guard isFinishing else {
return
}
self?.selectedIndex = i
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment