Voglio disabilitare un pulsante ( UIButton
) su iOS dopo averlo cliccato. Sono nuovo nello sviluppo per iOS ma penso che il codice equivalente sull'obiettivo - C sia questo:
button.enabled = NO;
Ma non potevo farlo su Swift.
Voglio disabilitare un pulsante ( UIButton
) su iOS dopo averlo cliccato. Sono nuovo nello sviluppo per iOS ma penso che il codice equivalente sull'obiettivo - C sia questo:
button.enabled = NO;
Ma non potevo farlo su Swift.
Risposte:
Il valore booleano per NO
in Swift è false
.
button.isEnabled = false
dovrebbe farlo.
Ecco la documentazione Swift per UIControl
la isEnabled
proprietà di.
Se desideri che il pulsante rimanga statico senza l'aspetto "premuto":
// Swift 2
editButton.userInteractionEnabled = false
// Swift 3
editButton.isUserInteractionEnabled = false
Ricorda:
1) Il tuo IBOutlet
è ->@IBOutlet weak var editButton: UIButton!
2) Il codice sopra va inserito viewWillAppear
Il modo in cui lo faccio è il seguente:
@IBAction func pressButton(sender: AnyObject) {
var disableMyButton = sender as? UIButton
disableMyButton.enabled = false
}
L'IBAction è collegata al tuo pulsante nello storyboard.
Se hai impostato il tuo pulsante come outlet:
@IBOutlet weak var myButton: UIButton!
Quindi è possibile accedere alle proprietà abilitate utilizzando il file. notazione sul nome del pulsante:
myButton.enabled = false
Disabilita un pulsante su Swift 3:
yourButton.isEnabled = false
Per coloro che hanno cercato su Google "disabilita un pulsante" ma potrebbero avere casi d'uso più sfumati:
Disabilita con effetto visivo: come altri hanno detto, questo impedirà la pressione del pulsante e il sistema lo farà sembrare automaticamente disabilitato:
yourButton.isEnabled = false
Disabilita senza effetto visivo: stai usando un pulsante in un caso in cui dovrebbe sembrare normale ma non si comporta come il pulsante Mi piace reagendo ai tocchi? Prova questo!
yourButton.userInteractionEnabled = false
Nascondi senza disabilitare: questo approccio nasconde il pulsante senza disabilitarlo (invisibile ma può ancora essere toccato):
yourButton.alpha = 0.0
Rimuovi: rimuoverà completamente la visualizzazione:
yourButton.removeFromSuperView()
Tocca qualcosa dietro un pulsante: hai due pulsanti impilati e vuoi che il pulsante in alto si comporti temporaneamente come se non fosse lì? Se non avrai più bisogno del pulsante in alto, rimuovilo. Se ne avrai bisogno di nuovo, prova a condensarne l'altezza o la larghezza a 0!
È possibile abilitare / disabilitare un pulsante utilizzando isEnabled
o la isUserInteractionEnabled
proprietà.
La differenza tra due è:
isEnabled
è una proprietà di UIControl (super classe di UIButton) e ha effetti visivi (cioè disattivati) di abilitazione / disabilitazione
isUserInteractionEnabled
è una proprietà di UIView (super classe di UIControl) e non ha alcun effetto visivo sebbene raggiunga lo scopo
Utilizzo:
myButton.isEnabled = false // Recommended approach
myButton.isUserInteractionEnabled = false // Alternative approach
Supponiamo che in Swift 4 tu abbia un pulsante impostato per un segue IBAction
come questo @IBAction func nextLevel(_ sender: UIButton) {}
e che tu abbia altre azioni che si verificano all'interno della tua app (ad esempio un timer, gamePlay, ecc.). Piuttosto che disabilitare il pulsante Segue, potresti dare al tuo utente la possibilità di usarlo mentre le altre azioni sono ancora in corso e SENZA ARRESTARE L'APP . Ecco come:
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
}
}
Tieni presente che probabilmente avrai altre condizioni all'interno if appMode == 0
e / o if appMode == 1
che si verificheranno ancora e NON entreranno in conflitto con il mySegue
pulsante. Quindi, EVITANDO UN INCIDENTE .
Il pulsante può essere disabilitato in Swift 4 dal codice
@IBAction func yourButtonMethodname(sender: UIButon) {
yourButton.isEnabled = false
}
Value of type '(AnyObject) -> ()' has no member 'isEnabled'