Je souhaite désactiver un bouton (UIButton
) sur iOS après avoir cliqué dessus. Je suis novice dans le développement pour iOS mais je pense que le code équivalent sur objectif - C est le suivant:
button.enabled = NO;
Mais je ne pouvais pas faire ça sur Swift.
La valeur booléenne de NO
dans Swift est false
.
button.isEnabled = false
devrait le faire.
Ici est la documentation Swift pour la propriété UIControl
de isEnabled
.
Si vous souhaitez que le bouton reste statique sans l'apparence "enfoncée":
// Swift 2
editButton.userInteractionEnabled = false
// Swift 3
editButton.isUserInteractionEnabled = false
Rappelles toi:
1) Votre IBOutlet
est -> @IBOutlet weak var editButton: UIButton!
2) Le code ci-dessus va dans viewWillAppear
Voici comment je le fais:
@IBAction func pressButton(sender: AnyObject) {
var disableMyButton = sender as? UIButton
disableMyButton.enabled = false
}
IBAction est connecté à votre bouton dans le storyboard.
Si vous avez configuré votre bouton en tant que prise:
@IBOutlet weak var myButton: UIButton!
Ensuite, vous pouvez accéder aux propriétés activées en utilisant le fichier. notation sur le nom du bouton:
myButton.enabled = false
Désactiver un bouton sur Swift 3:
yourButton.isEnabled = false
Pour ceux qui googlé "désactiver un bouton", mais peut avoir des cas d'utilisation plus nuancées:
Désactiver avec effet visuel: Comme d'autres l'ont dit, cela évitera d'appuyer sur le bouton et le système lui donnera automatiquement l'air désactivé:
yourButton.isEnabled = false
Désactiver sans effet visuel: Utilisez-vous un bouton dans un cas où il devrait sembler normal mais ne pas se comporter comme un bouton en réagissant au toucher? Essaye ça!
yourButton.userInteractionEnabled = false
Masquer sans désactiver: Cette approche masque le bouton sans le désactiver (invisible mais toujours exploitable):
yourButton.alpha = 0.0
Supprimer: Ceci supprimera entièrement la vue:
yourButton.removeFromSuperView()
Tapez quelque chose derrière un bouton: Ayez deux boutons empilés et vous voulez que le bouton du haut agisse temporairement comme s'il n'était pas là? Si vous n'avez plus besoin du bouton supérieur, supprimez-le. Si vous en avez encore besoin, essayez de condenser sa hauteur ou sa largeur à 0!
Supposons que dans Swift 4, vous avez configuré un bouton pour une division sous la forme d'une IBAction
comme celle-ci @IBAction func nextLevel(_ sender: UIButton) {}
Et que d'autres actions se produisent dans votre application (c'est-à-dire une minuterie, un GamePlay, etc.). Plutôt que de désactiver le bouton de division, vous pouvez donner à votre utilisateur la possibilité d’utiliser cette séquence pendant que les autres actions sont encore en cours et SANS CRASHING THE APP . Voici comment:
var appMode = 0
@IBAction func mySegue(_ sender: UIButton) {
if appMode == 1 { // avoid crash if button pressed during other app actions and/or conditions
let conflictingAction = sender as UIButton
conflictingAction.isEnabled = false
}
}
Veuillez noter que vous aurez probablement d'autres conditions dans if appMode == 0
et/ou if appMode == 1
qui se produiront et qui n'entrent pas en conflit avec le bouton mySegue
. Ainsi, ÉVITER UN CRASH .
Le bouton peut être désactivé dans Swift 4 par le code
@IBAction func yourButtonMethodname(sender: UIButon) {
yourButton.isEnabled = false
}
Vous pouvez activer/désactiver un bouton à l'aide de la propriété isEnabled
ou isUserInteractionEnabled
.
La différence entre deux est la suivante:
isEnabled
est une propriété de UIControl (super classe d’UIButton) et il a des effets visuels (c’est-à-dire estompé) of enable/disable
isUserInteractionEnabled
est une propriété de UIView (super classe d’UIControl) et n’a aucun effet visuel, bien qu’il atteigne le but recherché.
Utilisation:
myButton.isEnabled = false // Recommended approach
myButton.isUserInteractionEnabled = false // Alternative approach