- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用这种方法将相机与 swiftUI 相结合: https://medium.com/@gaspard.rosay/create-a-camera-app-with-swiftui-60876fcb9118
UIViewControllerRepresentable 由 PageFourView 类实现。 PageFourView是父View的TabView之一。我有一个 @EnvironmentObject
从 SceneDelegate 传递到父 View ,然后传递到 PageFourView。但是,当我尝试从 PageFourView 的 makeUIViewController 方法访问 @EnvironmentObject
时,出现错误:
Fatal error: No ObservableObject of type Data found. AView.environmentObject(_:) for Data may be missing as an ancestor ofthis view
... 即使我可以从 context.environment 中看到 @Environment 对象。这是我的代码:
import UIKit
import SwiftUI
import Combine
final class PageFourView: UIViewController, UIViewControllerRepresentable {
public typealias UIViewControllerType = PageFourView
@EnvironmentObject var data: Data
var previewView: UIView!
override func viewDidLoad() {
previewView = UIView(frame: CGRect(x:0, y:0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))
previewView.contentMode = UIView.ContentMode.scaleAspectFit
view.addSubview(previewView)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<PageFourView>) -> PageFourView {
print(context.environment)
print(self.data.Name)
return PageFourView()
}
func updateUIViewController(_ uiViewController: PageFourView, context: UIViewControllerRepresentableContext<PageFourView>) {
}
}
struct PageFourView_Previews: PreviewProvider {
@State static var data = Data()
static var previews: some View {
PageFourView().environmentObject(self.data)
}
}
这是调用 PageFourView 的父 View :
import SwiftUI
struct AppView: View {
@EnvironmentObject var data: Data
var body: some View {
TabView {
PageOneView().environmentObject(data)
.tabItem {
Text("PageOne")
}
PageTwoView().environmentObject(data)
.tabItem {
Text("PageTwo")
}
PageThreeView().environmentObject(data)
.tabItem {
Text("PageThree")
}
PageFourView().environmentObject(data)
.tabItem {
Text("PageFour")
}
}
}
}
struct AppView_Previews: PreviewProvider {
@State static var data = Data()
static var previews: some View {
AppView().environmentObject(self.data)
}
}
final class CameraViewController: UIViewController {
let cameraController = CameraController()
var previewView: UIView!
override func viewDidLoad() {
previewView = UIView(frame: CGRect(x:0, y:0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))
previewView.contentMode = UIView.ContentMode.scaleAspectFit
view.addSubview(previewView)
cameraController.prepare {(error) in
if let error = error {
print(error)
}
try? self.cameraController.displayPreview(on: self.previewView)
}
}
}
extension CameraViewController : UIViewControllerRepresentable{
public typealias UIViewControllerType = CameraViewController
public func makeUIViewController(context: UIViewControllerRepresentableContext<CameraViewController>) -> CameraViewController {
return CameraViewController()
}
public func updateUIViewController(_ uiViewController: CameraViewController, context: UIViewControllerRepresentableContext<CameraViewController>) {
}
}
最佳答案
并且 UIViewRepresentable
和 UIViewControllerRepresentable
是一个 View
并且必须是一个结构。
在描述的情况下,不需要可表示的 Controller ,因为您使用 View 进行操作,因此这里是更正后的代码:
struct PageFourView: UIViewRepresentable {
@EnvironmentObject var data: Data
func makeUIView(context: Context) -> UIView {
let view = UIView(frame: CGRect(x:0, y:0, width: UIScreen.main.bounds.size.width,
height: UIScreen.main.bounds.size.height))
view.contentMode = UIView.ContentMode.scaleAspectFit
print(context.environment)
print(self.data.Name)
return view
}
func updateUIView(_ uiView: UIView, context: Context) {
}
}
顺便说一句,您不需要将 .environmentObject
传递给同一 View 层次结构中的 subview ,仅适用于新层次结构,例如工作表,因此您可以使用如下简化代码
var body: some View {
TabView {
PageOneView()
.tabItem {
Text("PageOne")
}
PageTwoView()
.tabItem {
Text("PageTwo")
}
PageThreeView()
.tabItem {
Text("PageThree")
}
PageFourView()
.tabItem {
Text("PageFour")
}
}
}
更新:对于 CameraViewController
只需将其包装如下
struct CameraView: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> CameraViewController {
CameraViewController()
}
func updateUIViewController(_ uiViewController: CameraViewController, context: Context) {
}
}
关于swiftui - 从 UIViewControllerRepresentable 对象访问 @Environment 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62824167/
好像你用 UIViewControllerRepresentable当您通过 sheet 在您的 SwiftUI 应用程序中实现 View Controller 时您无法滑动以关闭它。您是否需要做一些
我正在尝试使用 UIKit 制作 PDFView 并从以前的 SwiftUI View 中传递数据。数据本身是一个带有文件名的字符串。不知何故,字符串没有从 UIViewControllerRepre
似乎无法创建与 CNContactPickerViewController 一起使用的 UIViewControllerRepresentable。 使用 Xcode 11 beta 4,我使用其他
在 SwiftUI 中,我试图使用一个按钮来实现 UIViewControllerRepresentable 中的文本更改,但可能缺少有关绑定(bind)的关键概念。 在 SwiftUI 中: str
在 xcode 以某种方式更新后我遇到了一个问题(猜测它是一个新的 xcode 版本)。当我尝试在新模拟器中运行该应用程序时,出现错误 Thread 1: Fatal error: UIViewCon
在 SwiftUI 中,如果您使用 NavigationLink() 转换为 UIViewControllerRepresentable,您会如何;比如说,在导航栏上添加按钮或更改标题属性。 这就是我
我有一个 UIHostingController包含在 UIViewControllerRepresentable包含对绑定(bind)的引用。当绑定(bind)改变时,updateUIViewCon
更新:从 beta4 开始,问题仍然存在。 我创建了一个非常简单的示例,说明由 UIViewControllerRepresentable 表示的 UIViewController 如何从不释放。 i
我正在尝试更改 UIViewControllerRepresentable的@State并注意到 updateUIViewController(_ uiViewController:context:)
我有以下代码片段: struct player : UIViewControllerRepresentable { var url : String var player1:
所以我正在尝试创建一个自定义分页 scrollView。我已经能够创建该包装器,并且该包装器内的内容由一个自定义 View 组成。在那个自定义 View 中,我有两个 NavigationLink 按
我使用这种方法将相机与 swiftUI 相结合: https://medium.com/@gaspard.rosay/create-a-camera-app-with-swiftui-60876fcb
首先,我知道可以使用 SwiftUI 列表等选项来获得类似的效果。但是我需要 UICollectionView 的自动滚动功能,所以我真的很想实现一个“老派”版本。我什至不想要理想的组合布局版本。 我
我创建了一个符合 UIViewControllerRepresentable 的包装器。我创建了一个 UIViewController,其中包含一个启用了分页的 UIScrollView。 自定义包装
我正在开发一个混合使用 UIKit 和 SwiftUI 的项目。我目前有一个 ZStack,我在其中保存了我的 SwiftUI 内容,我需要在该内容之上显示一个 UIViewController。所以
我正在尽可能使用 SwiftUI 创建一个新的 iOS 应用程序。但是,我希望能够生成包含一些数据的 PDF。 在没有 swiftUI 的类似项目中,我可以做到这一点 let docControlle
我正在尝试在 Xcode 14 beta 和 iOS 16 中为我的 View Controller 创建 Xcode 预览。每当我运行代码时,它只会在对话框中抛出一些 Xcode 预览错误并使预览崩
不确定我是否遗漏了什么或发现了 SwiftUI 错误。这是一件如此简单的事情,它让我发疯。 尝试设置 UIViewControllerRepresentable 但出现以下错误: Protocol '
我有一个 UITableViewController我包裹在 UIViewControllerRepresentable 中的子类. 我已经设置了 navigationItem.title和 navi
使用 Xcode 11 GM Seed 编写一些 SwiftUI 代码,我遇到了一个我不明白的 Swift 错误。 struct MainViewController: View { var
我是一名优秀的程序员,十分优秀!