如何从 SwiftUI 视图返回到 UIKit?

2024-01-07

我在 HostingViewController 和 UIKit Viewcontroller 中有一个 SwiftUI。我的目标是通过按下按钮在它们之间切换。问题是我无法从 HostingViewController 内的 SwiftUI 视图返回到 UIKit。

我可以使用以下 segue 函数通过 UIKit ViewController 访问 HostingViewController:

 @IBSegueAction func swiftUIAction(_ coder: NSCoder) -> UIViewController? {
        return UIHostingController(coder: coder, rootView: WorkoutSelectView())
    }

我尝试过的

但我不知道如何回去。我使用了一个解决方案,从我的 SwiftUI 视图的 AppDelegate 调用一个函数:

 guard let appDelegate: AppDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
 appDelegate.switchBack()

在 Appdelegate 内部我有这个函数:

 func switchBack(){
        guard var rootViewController = (UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate)?.window?.rootViewController else {
                  return
        }
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let controller = storyboard.instantiateViewController(withIdentifier: "Home") as! HomeViewController
        rootViewController.present(controller, animated: true, completion: { () -> Void in
        
        })
    }

最酷的事情是它有效,但问题是:

<WorkoutTracker.HomeViewController: 0x148f072a0>) whose view is not in the window hierarchy.

那么你有什么想法吗?


可能的方法是将完成回调传递到您的 SwiftUI 视图中,如下面的简化演示所示

struct WorkoutSelectView: View {
    var completion: () -> () = {}

    var body: some View {
        Button("Close", action: completion)
    }
}

并在 UIViewController 中使用此回调来关闭呈现的控制器,例如

@IBSegueAction func swiftUIAction(_ coder: NSCoder) -> UIViewController? {
   let controller =  UIHostingController(coder: coder, 
        rootView: WorkoutSelectView() { [weak self] in
           self?.dismiss(true)
        })
   return controller
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 SwiftUI 视图返回到 UIKit? 的相关文章

  • 在 Monogame 和 UIKit 之间切换

    我一直在搜索和搜索 但似乎找不到适合我想做的事情的解决方案 而且我几乎已经到了不得不问它是否可能的地步 我正在使用 Xamarin Studio 开发 iOS 应用程序 我有几个不同的屏幕设置为 UIViewController 它们运行良
  • 是否可以在 iOS 应用程序中使用 rsync?

    是否可以在 iPhone 或 iPad 应用程序中使用 rsync lib 或者也许有任何适合通过 sftp 进行远程文件同步的替代方案 Acrosync库是一个不错的选择 我已经为它做了一个演示 它根据 RPL 许可证进行许可 并提供商业
  • 仅当捏住单元格的 imageView 时,才可以在 UICollectionView 的自定义单元格中放大/缩小 UIImageView 吗?

    我有一个 CollectionView 它有一个自定义单元格 我想放大 缩小单元格中的 imageView 所以我在 CollectionView m 添加捏合手势 当我向 self collectionView 添加手势时 如下所示 se
  • SwiftUI - 正确使用 @available() 和 #available

    我在下面的代码中遗漏了什么吗 此应用程序在 iOS 15 设备上构建 macOS Monterey b5 Xcode 13 b5 并完美执行 但在 iOS 14 7 设备上导致 SIGABRT import SwiftUI struct C
  • 场景 - 根据 iPad 或 iPhone 使用专用故事板

    Apple 现在希望我们使用 场景 而不是窗口和屏幕来显示 iPad 和 iPhone 的内容 现在添加了对场景的支持 我似乎失去了使用故事板定位 iPad 或 iPhone 的能力 I set my scenes inside plist
  • SwiftUI withAnimation 完成回调

    我有一个基于某种状态的 swiftUI 动画 withAnimation linear duration 0 1 self someState newState 上述动画完成时是否会触发任何回调 如果有关于如何在 SwiftUI 中使用完成
  • 生成具有给定分布的随机数

    看看这个问题 快速选择随机数的概率 https stackoverflow com questions 26092977 swift probability of random number being selected 最上面的答案建议使
  • Self 类型的存储变量(特别是子类化时)

    class LinkedNode
  • 在 Xcode 上创建配置文件

    我正在尝试在 iPhone 上调试应用程序 Xamarin Forms 我已经在我的 Windows PC 上安装了 Visual Studio 我正在其上编写应用程序 并在我的 Mac 上安装了 Visual Studio 和 Xcode
  • 杀死应用程序后,后台获取不起作用

    我正在尝试通过后台获取从 url 获取数据 我的函数尝试获取数据 如果有新数据 它会发送本地通知 当我最小化应用程序时 后台获取会在大约 10 20 分钟后开始工作 但是当我杀死该应用程序 双击主页按钮并关闭应用程序 时 它不起作用 我等了
  • iOS 13.1 AVAudio 播放器崩溃

    当我跟踪问题时 我的应用程序在 iOS 13 1 上崩溃 然后发现应用程序崩溃是因为AVAudioPlayer 以下是我的播放器设置 if let wrongURL Bundle main url forResource wrongAudi
  • 如何让NSManagedObject不出错?

    我目前正在调试另一个开发人员编写的一个大项目 该项目使用CoreData我对此很陌生 我遇到了崩溃 这是由于某些NSManagedObject是一个错误 我对什么是错误不太了解 我想将对象转换为 非错误 看看它是否有帮助 阅读文档让我想到t
  • Swift - 如何 popViewController 动画两个视图回来

    我的故事板里有一些UIViewControllers和我的主要UINavigationController 然后我有一个 UIViewControllertableView didSelectRowAtIndexPath我弹出UIViewC
  • 我正在使用“DrawLinearGradient”函数来绘制渐变线。但我使用的两种颜色并没有在直线上等分

    我正在使用 DrawLinearGradient 函数来绘制渐变线 但我使用的两种颜色并没有在线条中等分 CGColorSpace colorSpace CGColorSpace CreateDeviceRGB CGColor colors
  • 使用 swift 在 WKWebView 上显示活动指示器

    我正在处理以下代码 并尝试在页面加载时在视图中显示活动指示器 我尝试实施WKNavigationDelegate方法 但我失败了 因为没有任何显示 对于如何解决这个问题 有任何的建议吗 我没有设置 SupportWebView 视图dele
  • iPhone 中的视频过滤速度很慢

    我正在尝试在 iPhone 中过滤视频 这是我的程序结构和源代码 AppDelegate h AppDelegate m ViewController h ViewController m AppDelegate 文件与默认文件相同 这是我
  • 仅为 UITableView 中的某个部分启用编辑模式

    我有一个tableView其中有一个可编辑的部分 如果我启用整个编辑tableView 其他单元格在编辑模式下不是selectable 所以我需要仅在特定部分启用编辑模式 以便其他单元格selectable 该部分是可编辑的 我需要设置编辑
  • 在 ios 7 设备上获取多个应用程序图标

    我在 ios7 iPhone5 设备 上遇到一个奇怪的错误 我在ios7上使用xcode5安装了iPhone应用程序我的问题是每当我在设备上安装应用程序时 我都会收到多个应用程序图标 多次使用相同的名称 我还尝试通过我的系统使用不同的应用程
  • 使用 Box2d 拖放 UIViews (iOS) [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我最近发现了一个很好的教程 用于使用
  • 可以在 iOS 应用程序中全局禁用旋转吗?

    我有一个由很多视图控制器组成的应用程序 在项目摘要中 我已将纵向方向设置为唯一支持的设备方向 然而 该应用程序在横向旋转时仍然会变得混乱 我的问题是 有没有办法通过应用程序委托或其他方式全局禁用自动旋转 或者我是否必须进入所有视图控制器并添

随机推荐