【问题标题】:How to add SwiftUI form to UIView Controller如何将 SwiftUI 表单添加到 UIView 控制器
【发布时间】:2020-12-09 15:44:17
【问题描述】:

我有一个 UIViewController,它通过我的 viewDidLoad 中的一个函数呈现一个函数:

let imageView: UIImageView = {
    let iv = UIImageView()
    iv.contentMode = .scaleAspectFit
    return iv
    }()

func configureViewComponents() {
    
    view.addSubview(imageView)

这样称呼它:

override func viewDidLoad() {
    super.viewDidLoad()
    configureViewComponents()
}

我在单独的文件 form.swift 中有一个表单:

import Combine
import SwiftUI

struct myForm: View {

@ObservedObject var submission = Submission()

@State var confirmationMessage = ""
@State var showingConfirmation = false


var body: some View {
    NavigationView {
        Form {
            Toggle(isOn: $submission.fieldOne ) {
                Text("Field One")
            }

我正在尝试将它添加到我的 UIViewController 中,就像我使用 view.addSubview(myForm) 添加我的 imageView 但我收到了消息 cannot convert value of type form to expected argument type UIView.

如何在这个 UIViewController 中展示我的表单?

【问题讨论】:

    标签: swift swiftui


    【解决方案1】:

    您需要使用UIHostingController,如下所示

    func configureViewComponents() {
    
        view.addSubview(imageView)
    
        let formController = UIHostingController(rootView: myForm())
        if let form = formController.view {
            form.translatesAutoresizingMaskIntoConstraints = false
    
            view.addSubview(form)
            form.topAnchor.constraint(equalTo: imageView.bottomAnchor, constant: 0).isActive = true
            form.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
            form.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
            form.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
    
            self.addChild(formController)
        }
    }
    

    【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 2016-09-18
    • 2021-09-30
    • 1970-01-01
    • 2014-01-27
    • 2019-10-31
    • 2017-02-17
    • 1970-01-01
    相关资源
    最近更新 更多