Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -49,44 +49,6 @@ extension UIViewController: ViewControllable {
dismiss(animated: animated, completion: completion)
}

/// Called just before the ``ViewControllable`` instance is added or removed from a container
/// ``ViewControllable`` instance.
///
/// - Parameter viewController: The parent ``ViewControllable`` instance, or `nil` if there is no parent.
public func willMove(toParent viewController: ViewControllable?) {
let viewController: UIViewController? = viewController?._asUIViewController()
willMove(toParent: viewController)
}

/// Called after the ``ViewControllable`` instance is added or removed from a container
/// ``ViewControllable`` instance.
///
/// - Parameter viewController: The parent ``ViewControllable`` instance, or `nil` if there is no parent.
public func didMove(toParent viewController: ViewControllable?) {
let viewController: UIViewController? = viewController?._asUIViewController()
didMove(toParent: viewController)
}

/// Adds the given ``ViewControllable`` instance as a child.
///
/// - Parameter viewController: The ``ViewControllable`` instance to be added as a child.
public func addChild(_ viewController: ViewControllable) {
let viewController: UIViewController = viewController._asUIViewController()
guard !children.contains(viewController)
else { return }
addChild(viewController)
}

/// Removes the given ``ViewControllable`` instance from its parent.
///
/// - Parameter viewController: The ``ViewControllable`` instance to be removed from its parent.
public func removeChild(_ viewController: ViewControllable) {
let viewController: UIViewController = viewController._asUIViewController()
guard children.contains(viewController)
else { return }
viewController.removeFromParent()
}

/// Contains the given ``ViewControllable`` instance within the entire bounds of the parent
/// ``ViewControllable`` instance.
///
Expand Down Expand Up @@ -114,7 +76,7 @@ extension UIViewController: ViewControllable {
subview.centerYAnchor.constraint(equalTo: view.centerYAnchor),
subview.centerXAnchor.constraint(equalTo: view.centerXAnchor)
])
viewController.didMove(toParent: self)
viewController._asUIViewController().didMove(toParent: self)
}

/// Uncontains the given ``ViewControllable`` instance.
Expand All @@ -124,7 +86,7 @@ extension UIViewController: ViewControllable {
let subview: UIView = viewController._asUIViewController().view
guard subview.isDescendant(of: view)
else { return }
viewController.willMove(toParent: nil)
viewController._asUIViewController().willMove(toParent: nil)
subview.removeFromSuperview()
removeChild(viewController)
}
Expand All @@ -135,6 +97,20 @@ extension UIViewController: ViewControllable {
public func _asUIViewController() -> UIViewController { // swiftlint:disable:this identifier_name
self
}

private func addChild(_ viewController: ViewControllable) {
let viewController: UIViewController = viewController._asUIViewController()
guard !children.contains(viewController)
else { return }
addChild(viewController)
}

private func removeChild(_ viewController: ViewControllable) {
let viewController: UIViewController = viewController._asUIViewController()
guard children.contains(viewController)
else { return }
viewController.removeFromParent()
}
}

#endif
22 changes: 0 additions & 22 deletions Sources/Nodes/ViewControllable/ViewControllable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -53,28 +53,6 @@ public protocol ViewControllable: AnyObject {
completion: (() -> Void)?
)

/// Called just before the ``ViewControllable`` instance is added or removed from a container
/// ``ViewControllable`` instance.
///
/// - Parameter viewController: The parent ``ViewControllable`` instance, or `nil` if there is no parent.
func willMove(toParent viewController: ViewControllable?)

/// Called after the ``ViewControllable`` instance is added or removed from a container
/// ``ViewControllable`` instance.
///
/// - Parameter viewController: The parent ``ViewControllable`` instance, or `nil` if there is no parent.
func didMove(toParent viewController: ViewControllable?)

/// Adds the given ``ViewControllable`` instance as a child.
///
/// - Parameter viewController: The ``ViewControllable`` instance to be added as a child.
func addChild(_ viewController: ViewControllable)

/// Removes the given ``ViewControllable`` instance from its parent.
///
/// - Parameter viewController: The ``ViewControllable`` instance to be removed from its parent.
func removeChild(_ viewController: ViewControllable)

/// Contains the given ``ViewControllable`` instance within the entire bounds of the parent
/// ``ViewControllable`` instance.
///
Expand Down