manumateos.dev

Permitir el uso de la tecla Menú/Back en un UIAlertController

Un UIAlertController es quizá el modo más sencillo, lógico y normal de mostrar un modal en una aplicación de tvOS. Es nativo del sistema, permite colocar acciones… Es hasta razonablemente bonito.

Y si bien es sencillo tener un UIAlertController con varios botones como el de la imagen inferior, hay casos en los que podemos querer uno que sea meramente informativo o con un mensaje de “Cargando” (este caso es especialmente frecuente en apps de tvOS).

UIAlertController con botones en tvOS

Y el problema es que un UIAlertController por defecto es modal. Es decir, está diseñado para no permitir al usuario descartarlo por un sitio que no esté expresamente definido (en este caso por las acciones que le podamos añadir al construirlo).

La solución para tener un UIAlertController sin botones que permita, por el contrario, usar el botón “Menú” (o “Back”) del Siri Remote pasa por añadir una acción oculta, sin título, que sea para cancelar.

let cancelAction = UIAlertAction(title: nil, style: .cancel, handler: { action in
    cancelActionHandler?()
})
                                    
alertController.addAction(cancelAction)

(El contenido de la clausura o del handler puede ser el que esperéis, o incluso puede no haber ningún tipo de manejador, dado que en este momento no es obligatorio; esto ya como os lo planteéis vosotros).