NSInterfaceView
public struct NSInterfaceView : NSViewRepresentable
The NSInterfaceView
struct helps you to use AppKit NSView or its
derived class in project using SwiftUI.NSInterfaceView
is a type that represents
part of your app’s user interface using AppKit and provides modifiers that you use to configure views.
You create custom views by declaring types that conform to the View
protocol. Implement the required View/body-swift.property
computed
property to provide the content for your custom view. Then you can present your AppKitt
View by using NSInterfaceView(MyView())
, as follows.
struct MyView: View {
var body: some View {
NSInterfaceView(MyView())
}
}
The View
protocol provides a large set of modifiers, defined as protocol
methods with default implementations, that you use to position and configure
views in the layout of your app. Modifiers typically work by wrapping the
view instance on which you call them in another view with the specified
characteristics. For example, adding the View/opacity(_:)
modifier to a
interface view returns a new view with some amount of transparency:
NSInterfaceView(MyView())
.opacity(0.5) // Display partially transparent interface view.
It is recommended to use ZStack
with NSInterfaceView
, as follows.
ZStack {
NSInterfaceView(MyView())
MySwiftUIView()
}
A wrapper that you use to integrate an AppKit view into your SwiftUI view hierarchy.
Use an NSInterfaceView
instance to create and manage an
doc://com.apple.documentation/documentation/AppKit/NSView object in your SwiftUI
interface. Adopt this protocol in one of your app’s custom instances, and
use its methods to create, update, and tear down your view. The creation and
update processes parallel the behavior of SwiftUI views, and you use them to
configure your view with your app’s current state information. Use the
teardown process to remove your view cleanly from your SwiftUI. For example,
you might use the teardown process to notify other objects that the view is
disappearing.
To add your view into your SwiftUI interface, create your
NSInterfaceView
instance and add it to your SwiftUI interface. The
system calls the methods of your representable instance at appropriate times
to create and update the view. The following example shows the inclusion of
a NSInterfaceView
in the view hierarchy.
struct ContentView: View {
var body: some View {
ZStack {
Text("Global Sales")
NSInterfaceView(MyNSView())
}
}
}
The system doesn’t automatically communicate changes occurring within your
view controller to other parts of your SwiftUI interface. When you want your
view controller to coordinate with other SwiftUI views, you must provide a
NSViewControllerRepresentable/Coordinator
object to facilitate those
interactions. For example, you use a coordinator to forward target-action
and delegate messages from your view controller to any SwiftUI views.
-
The type of view to present.
Declaration
Swift
public var nsInterfaceView: NSView
-
A
closure
helps you finish some special things like work to be done in AppKit interface.Declaration
Swift
public var callback: (() -> Void)?
-
Undocumented
Declaration
Swift
public init(_ nsInterfaceView: NSView = NSView(), _ callback: (() -> Void)? = nil)
-
Creates the view object and configures its initial state.
You must implement this method and use it to create your view object. Configure the view using your app’s current data and contents of the
context
parameter. The system calls this method only once, when it creates your view for the first time. For all subsequent updates, the system calls theNSViewRepresentable/updateNSView(_:context:)
method.Declaration
Swift
public func makeNSView(context: Context) -> NSView
Parameters
context
A context structure containing information about the current state of the system.
Return Value
Your AppKit view configured with the provided information.
-
Updates the state of the specified view with new information from SwiftUI.
When the state of your app changes, SwiftUI updates the portions of your interface affected by those changes. SwiftUI calls this method for any changes affecting the corresponding AppKit view. Use this method to update the configuration of your view to match the new state information provided in the
context
parameter.Declaration
Swift
public func updateNSView(_ nsView: NSView, context: Context)
Parameters
nsView
Your custom view object.
context
A context structure containing information about the current state of the system.
-
A return type for function
makeCoordinator
.Declaration
Swift
open class Coordinator : NSObject
-
Creates the custom instance that you use to communicate changes from your view to other parts of your SwiftUI interface.
Implement this method if changes to your view might affect other parts of your app. In your implementation, create a custom Swift instance that can communicate with other parts of your interface. For example, you might provide an instance that binds its variables to SwiftUI properties, causing the two to remain synchronized. If your view doesn’t interact with other parts of your app, you don’t have to provide a coordinator.
SwiftUI calls this method before calling the
NSViewRepresentable/makeNSView(context:)
method. The system provides your coordinator instance either directly or as part of a context structure when calling the other methods of your representable instance.Declaration
Swift
public func makeCoordinator() -> Coordinator