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.

Cómo instanciar un controlador de vista, los IBOutlets son nulos cuando se llaman las funciones.

Aquí está mi controlador de vista emergente:

import UIKit

class PopupViewController: UIViewController {

    var bigVC = GameViewController()
    var cardPhoto: UIImage?
    var nameLabel: String?
    var bio: String?
    var index: Int?

    @IBOutlet weak var photo: UIImageView!
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var button: UIButton!
    @IBOutlet weak var story: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        let storyboard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
        let firstViewController: GameViewController = storyboard.instantiateViewController(withIdentifier: "GameScreen") as! GameViewController

        photo.image = cardPhoto
        label.text = nameLabel
        story.text = bio
    }

    @IBAction func removePressed(_ sender: UIButton) {
        bigVC.removingCard(indexToRemove: index!)
        bigVC.resetImages()
        dismiss(animated: true, completion: nil)
    }
}

Mi función bigVC.resetImages() necesita cambiar las imágenes de 7 botones dentro de un arreglo de UIButtons. La función funciona perfectamente pero los arreglos devuelven nulo y la aplicación se bloquea cuando se llama a la función desde otro controlador de vista. ¿Cómo instanciar correctamente el controlador de vista para llamar a estos botones?

Este es el controlador de vista emergente para un juego de cartas. Tiene un botón que, al presionarse, debería eliminar una carta de la mano del jugador y cerrar el emergente para volver al controlador de vista del juego. ¿Cómo cambiaría eso?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para instanciar correctamente el controlador de vista y acceder a los botones dentro del array, puedes seguir estos pasos:

    1. Crea una variable para el array de objetos UIButton en tu clase GameViewController.
      var buttonArray = [UIButton]()
      
    2. En la función viewDidLoad() de tu GameViewController, agrega cada botón al array utilizando append():
      buttonArray.append(tuPrimerBoton)
      buttonArray.append(tuSegundoBoton)
      // Agrega los otros 7 botones de esta manera
      
    3. En la función removePressed() de tu PopupViewController, actualiza las imágenes de los botones llamando al método setImage() en los botones del buttonArray de tu GameViewController:
      for button in bigVC.buttonArray {
         // Establece la imagen para cada botón
         button.setImage(tuImagen, for: .normal)
      }
      

    Con estos cambios, llamar a bigVC.resetImages() desde tu PopupViewController debería cambiar correctamente las imágenes de los botones sin que la aplicación se bloquee.

Comments are closed.