web-dev-qa-db-fra.com

Désactiver un bouton

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.

73
baranbaris

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.

158
KerrM

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 

32
Daviiid

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
9
Krivvenz

Désactiver un bouton sur Swift 3:

yourButton.isEnabled = false
5
Gilad Brunfman

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!

1
Dave G

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

0
swiftcoder

Le bouton peut être désactivé dans Swift 4 par le code

@IBAction func yourButtonMethodname(sender: UIButon) {
 yourButton.isEnabled = false 
}
0
Tina Detroja

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
0
Jayprakash Dubey