Quiero deshabilitar un botón ( UIButton) en iOS después de hacer clic en él. Soy nuevo en el desarrollo para iOS, pero creo que el código equivalente en el objetivo - C es este:
Funciona bien para mí en Swift 4. Me di cuenta de que de forma predeterminada establece el remitente en Any en lugar de AnyObject, pero ambos siguen funcionando ... ¿Qué error está recibiendo?
Krivvenz
Para mayor claridad, tal vez debería indicar en su respuesta anterior que se requiere IBOutlet para que su código funcione. Si se necesitaba o no el IBOutlet es lo que me confundió. Claramente, es necesario.
No es necesario para que funcione. Puede escribir enviar el botón en la IBAction y cambiar el estado habilitado o, si lo tiene configurado como IBOutlet, puede hacerlo usando la .notation en la salida. Ambas formas funcionan.
Krivvenz
Creo que se necesita el IBOutlet si desea desactivar el botón desde otra función.
Para aquellos que buscaron en Google "deshabilitar un botón" pero pueden tener casos de uso más matizados:
Deshabilitar con efecto visual: como han dicho otros, esto evitará que se presione el botón y el sistema automáticamente lo hará parecer deshabilitado:
yourButton.isEnabled =false
Desactivar sin efecto visual: ¿Estás usando un botón en un caso en el que debería verse normal pero no comportarse como el botón Me gusta al reaccionar a los toques? ¡Prueba esto!
yourButton.userInteractionEnabled =false
Ocultar sin deshabilitar: este enfoque oculta el botón sin deshabilitarlo (invisible pero aún se puede tocar):
yourButton.alpha =0.0
Eliminar: esto eliminará la vista por completo:
yourButton.removeFromSuperView()
Toque algo detrás de un botón: ¿Tiene dos botones apilados y desea que el botón superior actúe temporalmente como si no estuviera allí? Si no necesita el botón superior nuevamente, quítelo. Si lo necesitará de nuevo, intente condensar su altura o ancho a 0.
¿Sabes por qué recibo este error? Value of type '(AnyObject) -> ()' has no member 'isEnabled'
También obtengo un error si cambio (_ sender: )aUIButton . El error dice:Value of type '(UIButton) -> ()' has no member 'isEnabled'
0
Digamos que en Swift 4 tienes un botón configurado para una transición como IBActionesta @IBAction func nextLevel(_ sender: UIButton) {}
y tienes otras acciones que ocurren dentro de tu aplicación (es decir, un temporizador, gamePlay, etc.). En lugar de deshabilitar el botón de segue, es posible que desee darle a su usuario la opción de usar ese segue mientras las otras acciones aún están ocurriendo y SIN APLICAR CERRAR LA APLICACIÓN . Así es cómo:
var appMode =0@IBActionfunc mySegue(_ sender:UIButton){if appMode ==1{// avoid crash if button pressed during other app actions and/or conditions
let conflictingAction = sender asUIButton
conflictingAction.isEnabled =false}}
Tenga en cuenta que es probable que tenga otras condiciones dentro if appMode == 0y / o if appMode == 1que aún ocurran y NO entren en conflicto con el mySeguebotón. Por lo tanto, EVITAR UN CHOQUE .
Si prueba su código, debería producirse este error:Value of type '(AnyObject) -> ()' has no member 'isEnabled'
Creo que te refieres yourButton(sender: UIButton). Su código actualizado probablemente causará el siguiente error:Value of type '(UIButton) -> ()' has no member 'isEnabled'
Si desea que el botón permanezca estático sin la apariencia de "presionado":
Recuerda:
1) Tu
IBOutlet
es ->@IBOutlet weak var editButton: UIButton!
2) El código anterior va en
viewWillAppear
fuente
La forma en que hago esto es la siguiente:
La IBAction está conectada a su botón en el guión gráfico.
Si tiene su botón configurado como un Outlet:
Luego puede acceder a las propiedades habilitadas usando el. notación en el nombre del botón:
fuente
Desactive un botón en Swift 3:
fuente
Para aquellos que buscaron en Google "deshabilitar un botón" pero pueden tener casos de uso más matizados:
Deshabilitar con efecto visual: como han dicho otros, esto evitará que se presione el botón y el sistema automáticamente lo hará parecer deshabilitado:
Desactivar sin efecto visual: ¿Estás usando un botón en un caso en el que debería verse normal pero no comportarse como el botón Me gusta al reaccionar a los toques? ¡Prueba esto!
Ocultar sin deshabilitar: este enfoque oculta el botón sin deshabilitarlo (invisible pero aún se puede tocar):
Eliminar: esto eliminará la vista por completo:
Toque algo detrás de un botón: ¿Tiene dos botones apilados y desea que el botón superior actúe temporalmente como si no estuviera allí? Si no necesita el botón superior nuevamente, quítelo. Si lo necesitará de nuevo, intente condensar su altura o ancho a 0.
fuente
Puede habilitar / deshabilitar un botón usando
isEnabled
oisUserInteractionEnabled
propiedad .La diferencia entre dos es:
isEnabled
es una propiedad de UIControl (superclase de UIButton) y tiene efectos visuales (es decir, atenuados) de habilitar / deshabilitarisUserInteractionEnabled
es una propiedad de UIView (superclase de UIControl) y no tiene efecto visual, pero logra el propósitoUso:
fuente
Value of type '(AnyObject) -> ()' has no member 'isEnabled'
(_ sender: )
aUIButton
. El error dice:Value of type '(UIButton) -> ()' has no member 'isEnabled'
Digamos que en Swift 4 tienes un botón configurado para una transición como
IBAction
esta@IBAction func nextLevel(_ sender: UIButton) {}
y tienes otras acciones que ocurren dentro de tu aplicación (es decir, un temporizador, gamePlay, etc.). En lugar de deshabilitar el botón de segue, es posible que desee darle a su usuario la opción de usar ese segue mientras las otras acciones aún están ocurriendo y SIN APLICAR CERRAR LA APLICACIÓN . Así es cómo:Tenga en cuenta que es probable que tenga otras condiciones dentro
if appMode == 0
y / oif appMode == 1
que aún ocurran y NO entren en conflicto con elmySegue
botón. Por lo tanto, EVITAR UN CHOQUE .fuente
El botón se puede desactivar en Swift 4 mediante el código
fuente
Value of type '(AnyObject) -> ()' has no member 'isEnabled'
yourButton(sender: UIButton)
. Su código actualizado probablemente causará el siguiente error:Value of type '(UIButton) -> ()' has no member 'isEnabled'