Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Wraps a SwiftUI View inside a ASDisplayNode
//
// HostingNode.swift
//
import AsyncDisplayKit
import SwiftUI
class HostingNode: ASDisplayNode {
var viewController: UIViewController?
override init() {
super.init()
setViewBlock { [weak self]() -> UIView in
self?.viewController = self?.makeHostingController()
return self?.viewController?.view ?? UIView()
}
}
private func makeHostingController() -> UIViewController {
UIHostingController(
rootView: Text("Attention")
)
}
}
@mycroftcanner

This comment has been minimized.

Copy link
Owner Author

@mycroftcanner mycroftcanner commented Oct 21, 2019

Wrapping a SwiftUI View inside a ASDisplayNode

We can initialize a node and provide a SwiftUI view to be used as the backing view.

The Text view nests in a UIHostingController, aUIViewControllersubclass that represents a SwiftUI view within UIKit contexts.

The view is provided via a block that will return a view so that the actual construction of the view can be saved until later. The node display step happens synchronously because a node can only be asynchronously displayed when it wraps an _ASDisplayView (the internal view subclass), not when it wraps a UIView.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.