Introducción al curso

1

Construyamos una app para iOS

2

Introducción a la arquitectura MVVM

3

Planeando nuestra app

Creando las primeras pantallas de la app

4

Programando la primera pantalla en módulos

5

Escribiendo la lógica para mostrar dos pantallas

6

Pantalla de inicio de sesión con SecureField y Scroll

7

Completando nuestra pantalla de inicio de sesión

8

Pantalla de registro de usuario

9

Comprobando el funcionamiento de nuestras pantallas

10

Estructura de las pantallas con TabView

11

Creando nuestra pantalla home

12

Pantalla home: logo y barra de búsqueda

13

Pantalla home: programación de interfaces estáticas

14

Pantalla home: carruseles

Aplicando arquitectura MVVM

15

Creando estructura para arquitectura MVVM

16

Modelando nuestro JSON

17

Peticiones al servidor

18

Mostrar información de un servidor de manera dinámica

19

Mostrar imágenes de forma dinámica y eficiente con LazyVGrid

Reproductor y búsqueda de video

20

Pasar datos entre pantallas

21

Darle datos de inicio a un Canvas

22

Reproducir videos dinámicamente de un servidor

23

Mostrar imágenes dinámicamente de un servidor

24

Mostrar alertas

25

Programar clase de búsqueda

26

Programar método de búsqueda

Últimas pantallas de la app

27

Pantalla de favoritos

28

Pantalla de perfil de usuario

29

Módulo de ajustes de perfil con Toggle

30

Pantalla de edición de perfil

31

Módulo de edición de perfil

32

Guardado interno de datos

Utilizando la cámara y fotos del iPhone

33

Captura de foto de perfil: ImagePicker y vista Sheet

34

Captura de foto de perfil con la cámara: modificar librerías de terceros

35

Captura de foto de perfil con la cámara: recuperar imágenes guardadas

¿Qué más posibilidades tiene SwiftUI?

36

Mejoremos nuestra app

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Pasar datos entre pantallas

20/36
Recursos

Aportes 3

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para iOS16 en adelante, después de 1000 videos y fotos encontré la solución, y como casi siempre, es muy sencilla, en vez de botones hay que usar un NavigationLink(destination: label:) destination siendo nuestra vista de gameView donde ahi mismo le entregas el valor de las variables, y en label utilizamos los valores que utilizamos para los botones quedándote así

  LazyVGrid(columns: formaGrid, spacing: 4){
                        
                        ForEach(todosLosVideoJuegos.gamesInfo,id: \.self){
                            juego in
                            NavigationLink(destination: gameView(url: juego.videosUrls.mobile, titulo: juego.title, studio: juego.studio, calificacion: juego.contentRaiting, anoPublicacion: juego.publicationYear, descripcion: juego.description, tags: juego.tags, imgsUrl: juego.galleryImages), label: {
                                VStack
                                {
                                    AsyncImage( url: URL( string: juego.galleryImages[0] )!  )
                                    { image in
                                        image
                                            .resizable()
                                            .aspectRatio(contentMode: .fit)
                                            .clipShape(RoundedRectangle(cornerRadius: 11))
                                            .padding(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 10))

                                    } placeholder: {
                                        placeholderImage()
                                    }


                                    Text("\(juego.title)").foregroundColor(.white)
                                        .font(.body)
                                        .padding(EdgeInsets(top: 1, leading: 0, bottom: 15, trailing: 0))


                                }

                            })
                            
                        }
                        
                    }

Aca preferi usar ya el struct de la class anterior que un integrante compartió, y use

NavigationLink(isActive: $gameViewIsActive, destination: {PantallaViewJuego(gameFrom: gameVO)}, label: {EmptyView()})

así no paso todas las variables, luego dentro del otro, solo hago referencia a esa var

struct PantallaViewJuego: View {
//    var gameVOFromPantallaJuegos : GameViewObject?
    var gameFrom : GameViewObject?
//    var url: String
//
//    var title: String
//    var studio: String
//    var calification: String
//    var anoPublicacion: String
//    var description: String
//    var tags: [String]
//    var imgUrls: [String]
    
    
    var body: some View {
        Text("Pantalla de juego: \(gameFrom!.title)")
//        Text("Pantalla de juego")
    }
}

Para esta parte y tomando en cuenta lo anterior de las sugerencias hice algunas cosas.

  1. Crear una estructura que sirva para almacenar los datos que se reciben del servidor.
struct GameViewObject{
    let url: String
    let title: String
    let studio: String
    let contentRaiting: String
    let publicationYear: String
    let description: String
    let tags: [String]
    let galleryImages: [String]
    
    init(game: Game) {
        url = game.videosUrls.mobile
        title = game.title
        studio = game.studio
        contentRaiting = game.contentRaiting
        publicationYear = game.publicationYear
        description = game.description
        tags = game.tags
        galleryImages = game.galleryImages
    }
}
  1. Inicializar una variable en JuegosView del tipo de la estructura.
@State var gameViewObject: GameViewObject? = nil
  1. Cambiar el botón por un NavigationLink.
ScrollView(showsIndicators: false){
	LazyVGrid(columns: formaGrid, spacing: 8){
		ForEach(viewModel.games, id: \.self){
			game in
			NavigationLink(destination: DetallesJuegoView(GameViewObject(game: game))) {
				KFImage(URL(string: game.galleryImages[0]))
					 .resizable()
					.aspectRatio(contentMode: .fit)
					.clipShape(RoundedRectangle.init(cornerRadius: 4))
					.padding(.bottom, 12)
			}
		}
	}
}
  1. Cambie un poco los detalles y me quedo de la siguiente manera.
struct DetallesJuegoView: View {
    
    var gameObjectView: GameViewObject? = nil
    
    init(_ gameObjectView: GameViewObject? = nil) {
        self.gameObjectView = gameObjectView
    }
    
    var body: some View {
        Text("El videojuego seleccionado es: \(self.gameObjectView?.title ?? "Sin titulo")")
    }
}

struct DetallesJuegoView_Previews: PreviewProvider {
    static var previews: some View {
        DetallesJuegoView()
    }
}