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 mostrar un controlador de vista durante 4 segundos después de que el usuario seleccione la fila en el método didSelectRowAt.

Tengo un controlador de vista con una tabla. Quiero saber cómo es posible hacer que cuando el usuario toque una de las filas, se muestre otro controlador de vista durante 5 segundos. Aquí está mi código. He creado una función objc:

@objc func moveHome() {
    store.dispatch(NavigationAction(destination: .home, direction: .forward))
}

Y en el método didSelectRowAt:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let st = UIStoryboard(name: "SchoolsMain", bundle: nil)
    let vc = st.instantiateViewController(withIdentifier: "SchoolsPreHomeViewController") as? SchoolsPreHomeViewController
    UserDefaults.standard.set(testData[indexPath.row].name, forKey: "orgNameForSplash")

    self.timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(self.moveHome), userInfo: nil, repeats: false)
}

Funciona, pero no como quiero. Ahora, cuando seleccionamos una fila, esperamos 5 segundos y luego se muestra otro controlador de vista. Pero quiero que al tocar se muestre de inmediato durante 5 segundos.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr la funcionalidad deseada, deberás llamar a la función moveHome inmediatamente después de presentar el nuevo controlador de vista, y luego utilizar DispatchQueue para retrasar el cierre del controlador de vista en 5 segundos. Aquí está el código actualizado:

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let st = UIStoryboard(name: "SchoolsMain", bundle: nil)
        let vc = st.instantiateViewController(withIdentifier: "SchoolsPreHomeViewController") as? SchoolsPreHomeViewController
        UserDefaults.standard.set(testData[indexPath.row].name, forKey: "orgNameForSplash")
    
        self.present(vc, animated: true, completion: nil)
        self.moveHome()
    
        DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
            vc.dismiss(animated: true, completion: nil)
        }
    }
    

    Este código presentará el nuevo controlador de vista inmediatamente después de seleccionar la fila, llamará a la función moveHome para navegar al siguiente controlador de vista, y luego utilizará DispatchQueue para cerrar el controlador de vista después de 5 segundos.

Comments are closed.