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 debo realmente eliminar UIAlertview de la vista – Error de texto que se superpone al texto anterior?

Hola a todos, tengo un error extraño que no puedo resolver; busqué en internet y no encontré ninguna solución. Tengo una pantalla de ViewController con 6 botones en ella. Quiero mostrar al usuario un UIAlertview con un texto de descripción cada vez que hace clic en uno de esos botones. El problema es que en el primer botón tengo el texto correcto, pero el problema comienza desde el segundo botón en adelante. El nuevo UIAlertView muestra el nuevo texto de descripción junto con el texto antiguo, por lo que el nuevo texto no se puede leer.

Desde el depurador, encontré que los antiguos UIAlertview están ahí, pero simplemente no se muestran en la pantalla principal.

¿Cuál es la forma correcta de eliminarlo del ViewController?

Esta es mi función de dismiss:

@objc func dismissAlert() {
    guard let targetView = mytargetView else {
        return
    }
    UIView.animate(withDuration: 0.25, animations: {self.alertView.frame = CGRect(x: 40, y: targetView.frame.size.height, width: targetView.frame.size.width-80, height: 300)}, completion: {done in
        if done {
            UIView.animate(withDuration: 0.25, animations: {
                self.backgroundView.alpha = 0
            }, completion: { done in
                if done {
                    self.alertView.removeFromSuperview()
                    self.backgroundView.removeFromSuperview()
                }
            })
        }
    })
}

Imagen – Los UIAlert anteriores todavía están en segundo plano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para el fallo de UIAlertview

    Descripción del problema:

    El usuario tiene una pantalla de controlador de vista con 6 botones. Cuando el usuario hace clic en uno de esos botones, quieren mostrarle al usuario un UIAlertview con un texto de descripción. El problema es que el primer botón funciona correctamente, pero a partir del segundo botón, el nuevo UIAlertview muestra el nuevo texto de descripción junto con los textos de descripción antiguos, lo que dificulta su lectura.

    Investigación y posible razón:

    A través de la depuración, el usuario encontró que los antiguos UIAlertviews estaban allí, pero simplemente no se mostraban en la pantalla principal. Al examinar el código, el usuario descubrió que llaman a self.alertView.removeFromSuperview() dentro de la función dismissAlert(), que utilizan para eliminar el UIAlertview de la pantalla del controlador de vista.

    Solución:

    La forma correcta de eliminar el UIAlertview del controlador de vista sería descartar el UIAlertview anterior antes de crear uno nuevo. Aquí tienes el código actualizado que resuelve este problema:

    @IBAction func buttonTapped(_ sender: Any) {
    
        // Descartar cualquier UIAlertview anterior
        if let alert = self.presentedViewController as? UIAlertController {
            alert.dismiss(animated: false, completion: nil)
        }
    
        // Crear un nuevo UIAlertview
        let alert = UIAlertController(title: "Mi título", message: "Mi mensaje.", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        self.present(alert, animated: true, completion: nil)
    }
    

    En el código anterior, cada vez que se pulsa el botón, primero descartamos cualquier UIAlertview presentado previamente comprobando si presentedViewController es de tipo UIAlertController. Si lo es, lo descartamos antes de crear un nuevo UIAlertview con el mensaje actualizado. De esta manera, solo se presenta un UIAlertview a la vez y el usuario puede leer fácilmente el mensaje.

    Conclusión:

    La solución anterior debería ayudar a resolver el problema donde se muestran múltiples UIAlertviews en la pantalla, lo que dificulta al usuario leer el mensaje. Al descartar la alerta anterior antes de presentar una nueva, el usuario puede ver fácilmente el mensaje sin superposiciones ni desorden.

Comments are closed.