Skip to content

Instantly share code, notes, and snippets.

@mishimay
Created July 1, 2022 09:26
Show Gist options
  • Save mishimay/e15ad4c84fdc1e0e5dc5dabe56516982 to your computer and use it in GitHub Desktop.
Save mishimay/e15ad4c84fdc1e0e5dc5dabe56516982 to your computer and use it in GitHub Desktop.
import SwiftUI
// ...
SomeView()
.background(UIViewControllerLifecycleView(
onViewWillAppear: {
}, onViewDidAppear: {
}, onViewWillDisappear: {
}, onViewDidDisappear: {
})
)
// ...
private struct UIViewControllerLifecycleView: UIViewControllerRepresentable {
class Coordinator: UIViewController {
let onViewWillAppear: (() -> Void)?
let onViewDidAppear: (() -> Void)?
let onViewWillDisappear: (() -> Void)?
let onViewDidDisappear: (() -> Void)?
init(onViewWillAppear: (() -> Void)?, onViewDidAppear: (() -> Void)?, onViewWillDisappear: (() -> Void)?, onViewDidDisappear: (() -> Void)?) {
self.onViewWillAppear = onViewWillAppear
self.onViewDidAppear = onViewDidAppear
self.onViewWillDisappear = onViewWillDisappear
self.onViewDidDisappear = onViewDidDisappear
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
onViewWillAppear?()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
onViewDidAppear?()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
onViewWillDisappear?()
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
onViewDidDisappear?()
}
}
var onViewWillAppear: (() -> Void)?
var onViewDidAppear: (() -> Void)?
var onViewWillDisappear: (() -> Void)?
var onViewDidDisappear: (() -> Void)?
func makeUIViewController(context: UIViewControllerRepresentableContext<UIViewControllerLifecycleView>) -> UIViewController {
context.coordinator
}
func makeCoordinator() -> UIViewControllerLifecycleView.Coordinator {
Coordinator(onViewWillAppear: onViewWillAppear, onViewDidAppear: onViewDidAppear, onViewWillDisappear: onViewWillDisappear, onViewDidDisappear: onViewDidDisappear)
}
func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<UIViewControllerLifecycleView>) {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment