Skip to content
33 changes: 22 additions & 11 deletions Sources/UIKitNavigation/Navigation/Presentation.swift
Original file line number Diff line number Diff line change
Expand Up @@ -122,15 +122,17 @@
} present: { [weak self] child, transaction in
guard let self else { return }
if presentedViewController != nil {
self.dismiss(animated: !transaction.uiKit.disablesAnimations) {
self.dismiss(
animated: !transaction.uiKit.disablesAnimations
) {
onDismiss?()
self.present(child, animated: !transaction.uiKit.disablesAnimations)
}
} else {
self.present(child, animated: !transaction.uiKit.disablesAnimations)
}
} dismiss: { [weak self] _, transaction in
self?.dismiss(animated: !transaction.uiKit.disablesAnimations) {
} dismiss: { child, transaction in
child.dismiss(animated: !transaction.uiKit.disablesAnimations) {
onDismiss?()
}
}
Expand Down Expand Up @@ -350,13 +352,12 @@
}
}
let childController = content(unwrappedItem)
let onDismiss = {
[
weak self,
presentationID = id(unwrappedItem.wrappedValue)
] in
let onDismiss = { [
weak self,
presentationID = id(unwrappedItem.wrappedValue)
] in
if let wrappedValue = item.wrappedValue,
presentationID == id(wrappedValue)
presentationID == id(wrappedValue)
{
inFlightController = self?.presentedByID[key]?.controller
item.wrappedValue = nil
Expand All @@ -381,10 +382,20 @@
}
} else if let presented = presentedByID[key] {
if let controller = presented.controller {
dismiss(controller, transaction)
var controllerToDismiss: UIViewController? = nil
if let tmpController = inFlightController {
controllerToDismiss = inFlightController
inFlightController = nil
} else if controller.presentedViewController != nil {
controllerToDismiss = self
} else {
controllerToDismiss = controller
}
if let controllerToDismiss {
dismiss(controllerToDismiss, transaction)
}
}
self.presentedByID[key] = nil
inFlightController = nil
}
}
}
Expand Down
Loading