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.

Guardar acciones en el controlador de vista anterior.

Tengo mi pantalla principal con solo un botón que dice “Mostrar siguiente pantalla”. Cuando aparece la segunda pantalla (VC), tiene 2 botones (volver atrás y seleccionar botón).

Mi objetivo es que cuando muestre la segunda pantalla y seleccione un botón en ella, pueda regresar a la primera. El botón en mi segunda pantalla se mantendrá seleccionado. ¿Cómo puedo hacer eso?

Básicamente, necesito guardar mis acciones en la segunda pantalla para que, si regreso a ella, muestre todo lo que hice.

¿Cuál es la mejor manera de hacerlo?

Storyboard

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hay diferentes formas de lograr el objetivo de guardar acciones en la segunda pantalla y mantener el botón seleccionado al volver a la primera pantalla. Una posible solución es utilizar un patrón de delegado y una propiedad para almacenar el estado del botón en la segunda pantalla.

    1. Crear un protocolo para el delegado:
    protocol SecondScreenDelegate: AnyObject {
        func didToggleSelectButton(_ selected: Bool)
    }
    
    1. Hacer que la primera pantalla se conforme al protocolo e implementar el método del delegado para recibir actualizaciones desde la segunda pantalla:
    class FirstScreenViewController: UIViewController, SecondScreenDelegate {
        // ...
        func didToggleSelectButton(_ selected: Bool) {
            // almacenar el estado del botón en una propiedad
            self.isButtonSelected = selected
        }
    }
    
    1. Crear una propiedad para almacenar el estado del botón en la primera pantalla:
    var isButtonSelected = false
    
    1. En la segunda pantalla, crear una variable débil (weak var) para el delegado y llamar al método del delegado con el estado del botón cada vez que se cambie de estado:
    weak var delegate: SecondScreenDelegate?
    @IBAction func selectButtonTapped(_ sender: UIButton) {
        sender.isSelected = !sender.isSelected
        delegate?.didToggleSelectButton(sender.isSelected)
    }
    
    1. En el método prepare(for segue:sender:) de la primera pantalla, establecer el delegado de la segunda pantalla como self y pasar el estado actual del botón si existe:
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let secondScreen = segue.destination as? SecondScreenViewController {
            secondScreen.delegate = self
            secondScreen.isButtonSelected = isButtonSelected
        }
    }
    
    1. En el método viewWillAppear() de la segunda pantalla, establecer el estado del botón basado en la propiedad almacenada:
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        selectButton.isSelected = isButtonSelected
    }
    

    Con esta implementación, cuando toques el botón “Seleccionar” en la segunda pantalla, se llamará al método del delegado y se almacenará el estado del botón en la propiedad de la primera pantalla. Cuando vuelvas a la primera pantalla y regreses a la segunda pantalla, el estado del botón se establecerá en el estado anterior.

Comments are closed.