Desejo desabilitar um botão ( UIButton
) no iOS depois que ele é clicado. Eu sou novo no desenvolvimento para iOS, mas acho que o código equivalente no objetivo - C é este:
button.enabled = NO;
Mas eu não poderia fazer isso rápido.
Desejo desabilitar um botão ( UIButton
) no iOS depois que ele é clicado. Eu sou novo no desenvolvimento para iOS, mas acho que o código equivalente no objetivo - C é este:
button.enabled = NO;
Mas eu não poderia fazer isso rápido.
Respostas:
O valor booleano para NO
em Swift é false
.
button.isEnabled = false
deve fazer isso.
Aqui está a documentação do Swift para UIControl
a isEnabled
propriedade de.
Se você deseja que o botão permaneça estático sem a aparência de "pressionado":
// Swift 2
editButton.userInteractionEnabled = false
// Swift 3
editButton.isUserInteractionEnabled = false
Lembrar:
1) Seu IBOutlet
é ->@IBOutlet weak var editButton: UIButton!
2) O código acima entra viewWillAppear
A maneira como faço isso é a seguinte:
@IBAction func pressButton(sender: AnyObject) {
var disableMyButton = sender as? UIButton
disableMyButton.enabled = false
}
O IBAction é conectado ao seu botão no storyboard.
Se você configurou o botão como um Outlet:
@IBOutlet weak var myButton: UIButton!
Em seguida, você pode acessar as propriedades habilitadas usando o. notação no nome do botão:
myButton.enabled = false
Desative um botão no Swift 3:
yourButton.isEnabled = false
Para aqueles que pesquisaram "desativar um botão" no Google, mas podem ter casos de uso mais diferenciados:
Desativar com efeito visual: como já foi dito, isso impedirá que o botão seja pressionado e o sistema fará com que pareça desativado automaticamente:
yourButton.isEnabled = false
Desativar sem efeito visual: você está usando um botão em um caso em que deveria parecer normal, mas não se comportar como botão de gostar ao reagir aos toques? Experimente isso!
yourButton.userInteractionEnabled = false
Ocultar sem desativar: esta abordagem oculta o botão sem desativá-lo (invisível, mas ainda pode ser tocado):
yourButton.alpha = 0.0
Remover: Isso removerá totalmente a visualização:
yourButton.removeFromSuperView()
Toque em algo atrás de um botão: tem dois botões empilhados e deseja que o botão superior temporariamente aja como se não estivesse lá? Se você não precisar do botão superior novamente, remova-o. Se você precisar dele novamente, tente condensar sua altura ou largura para 0!
Você pode ativar / desativar um botão usando isEnabled
ou isUserInteractionEnabled
propriedade.
A diferença entre os dois é:
isEnabled
é uma propriedade do UIControl (superclasse do UIButton) e tem efeitos visuais (ou seja, acinzentado) de habilitar / desabilitar
isUserInteractionEnabled
é uma propriedade de UIView (superclasse de UIControl) e não tem efeito visual, embora atinja o propósito
Uso:
myButton.isEnabled = false // Recommended approach
myButton.isUserInteractionEnabled = false // Alternative approach
Value of type '(AnyObject) -> ()' has no member 'isEnabled'
Digamos que no Swift 4 você tenha um botão configurado para uma segue IBAction
como este @IBAction func nextLevel(_ sender: UIButton) {}
e outras ações ocorram em seu aplicativo (por exemplo, um temporizador, gamePlay, etc.). Em vez de desabilitar o botão segue, você pode dar ao seu usuário a opção de usar aquele segue enquanto as outras ações ainda estão ocorrendo e SEM DERRAMAR O APP . Veja como:
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
}
}
Observe que você provavelmente terá outras condições dentro if appMode == 0
e / ou if appMode == 1
que ainda ocorrerão e NÃO entrarão em conflito com o mySegue
botão. Assim, EVITANDO UM CRASH .
O botão pode ser desabilitado no Swift 4 pelo código
@IBAction func yourButtonMethodname(sender: UIButon) {
yourButton.isEnabled = false
}
Value of type '(AnyObject) -> ()' has no member 'isEnabled'