ios - 关闭包含在 UIHostingController 中的 SwiftUI View

标签 ios uikit swiftui

我已将我的登录 View Controller 重写为 SwiftUI View . SignInView包裹在 UIHostingController 中子类 ( final class SignInViewController: UIHostingController<SignInView> {} ),并在需要登录时以模态方式全屏显示。

一切正常,除了我不知道如何关闭 SignInViewController来自 SignInView .我试过添加:

@Environment(\.isPresented) var isPresented

SignInView并将其分配给 false当登录成功时,但这似乎无法与 UIKit 互操作。我怎样才能关闭 View ?

最佳答案

我发现了另一种似乎效果很好的方法,并且感觉比其他一些方法更简洁。脚步:

  • 添加 dismissAction SwiftUI View 的属性:
  • struct SettingsUIView: View {
        var dismissAction: (() -> Void)
        ...
    }    
    
  • 调用 dismissAction当您想关闭 View 时:
  • Button(action: dismissAction ) {
        Text("Done")
    }
    
  • 当你呈现 View 时,为它提供一个解除处理程序:
  • let settingsView = SettingsUIView(dismissAction: {self.dismiss( animated: true, completion: nil )})
    let settingsViewController = UIHostingController(rootView: settingsView )
    
    present( settingsViewController, animated: true )
    

    关于ios - 关闭包含在 UIHostingController 中的 SwiftUI View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57190511/

    相关文章:

    ios - Swift UIPickerView 标签错误

    ios - 仅当视频在我的应用程序 Swift UIKit 中取消静音时才停止其他应用程序的背景音乐

    ios - 从 UIPickerView 自定义委托(delegate)和数据源获取选定值

    iphone - UITableView 在 Forground 状态下 Enter 后不重新加载数据

    iphone - 如何使我的 Nib 正确加载我自定义的 UIScrollView 子类?

    swift - 如何将 UIActivityViewController 与 SwiftUI 的 ScrollView 集成?

    swiftui - 在 SwiftUI 中同时流畅地动画文本随偏移量的变化

    macos - 如何在 swiftui (macos) 中将文本字段添加到工具栏

    objective-c - 将数据永久保存在 iOS 设备上

    ios - Apple TV - 如何实现像 UISegmentedControl 中那样的粘性焦点选择?