es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pasa una variable desde UIHostingController a la vista de SWIFTUI.

Tengo una aplicación de storyboard y ahora comienzo con vistas SwiftUI en mi aplicación existente. Tengo llamadas de API que rellenan variables como: nombre, apellido, correo electrónico y número de teléfono.

¿Cómo puedo pasar la variable UIKit en mi UIHostingController para mostrarla en la vista SwiftUI?

Mi archivo UIKit de la storyboard:

import UIKit
import SwiftUI
class UserDashboardHostVC: UIViewController {

var name = String()
var surname = String()
var email = String()
var mobile = String()


override func viewDidLoad() {
    super.viewDidLoad()

    getAPIdata() 
    // esto llena las 4 variables anteriores.

    let controller = UIHostingController(rootView: UserDashboard())
    controller.view.translatesAutoresizingMaskIntoConstraints = false
    self.addChild(controller)
    self.view.addSubview(controller.view)
    controller.didMove(toParent: self)
}
}

Mi vista SwiftUI:

import SwiftUI

struct UserDashboard: View {

var body: some View {
    NavigationView{

       Text(name)
       Spacer()
       Text(surname)
       Spacer()
       Text(email)
       Spacer()
       Text(mobile)
       Spacer()
   }
}
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Puede pasar las variables de UIKit a la vista de SwiftUI creando un inicializador personalizado en la vista de SwiftUI que tome esas variables como parámetros. Aquí tienes un ejemplo:

    import SwiftUI
    
    struct UserDashboard: View {
    
        var name: String
        var surname: String
        var email: String
        var mobile: String
    
        // Inicializador personalizado que toma variables de UIKit como parámetros
        init(name: String, surname: String, email: String, mobile: String) {
            self.name = name
            self.surname = surname
            self.email = email
            self.mobile = mobile
        }
    
        var body: some View {
            NavigationView{
                Text(name)
                Spacer()
                Text(surname)
                Spacer()
                Text(email)
                Spacer()
                Text(mobile)
                Spacer()
            }
        }
    }
    

    Luego, en tu UIHostingController, puedes pasar las variables de UIKit a la vista de SwiftUI llamando al inicializador personalizado y pasando los valores de las variables:

    import UIKit
    import SwiftUI
    
    class UserDashboardHostVC: UIViewController {
    
        var name = String()
        var surname = String()
        var email = String()
        var mobile = String()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            getAPIdata()
    
            // Crea una nueva instancia de la vista SwiftUI y pasa las variables
            let userDashboard = UserDashboard(name: name, surname: surname, email: email, mobile: mobile)
    
            let controller = UIHostingController(rootView: userDashboard)
            controller.view.translatesAutoresizingMaskIntoConstraints = false
            self.addChild(controller)
            self.view.addSubview(controller.view)
            controller.didMove(toParent: self)
        }
    }
    

    Esto mostrará los valores de las variables de UIKit en tu vista de SwiftUI.

Comments are closed.