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:
Funciona bem para mim no Swift 4. Percebi que, por padrão, ele define o remetente como Any em vez de AnyObject, mas ambos ainda funcionam ... Que erro você está obtendo?
Krivvenz
Para maior clareza, talvez você deva declarar em sua resposta acima que o IBOutlet é necessário para que seu código funcione. Se o IBOutlet era necessário ou não é o que me confundiu. Claramente, é necessário.
Não é necessário para que funcione. Você pode digitar o botão cast no IBAction e alterar o status de habilitado ou se você tiver configurado como um IBOutlet você pode fazer isso usando o .notation no outlet. Ambas as formas funcionam.
Krivvenz
Eu acredito que o IBOutlet é necessário se você deseja desativar o botão em outra função.
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ê sabe por que estou recebendo este erro? Value of type '(AnyObject) -> ()' has no member 'isEnabled'
Também recebo um erro se mudar (_ sender: )para UIButton. O erro diz:Value of type '(UIButton) -> ()' has no member 'isEnabled'
0
Digamos que no Swift 4 você tenha um botão configurado para uma segue IBActioncomo 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@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}}
Observe que você provavelmente terá outras condições dentro if appMode == 0e / ou if appMode == 1que ainda ocorrerão e NÃO entrarão em conflito com o mySeguebotão. Assim, EVITANDO UM CRASH .
Se você tentar seu código, este erro deverá ocorrer:Value of type '(AnyObject) -> ()' has no member 'isEnabled'
Eu acho que você quer dizer yourButton(sender: UIButton). Seu código atualizado provavelmente causará o seguinte erro:Value of type '(UIButton) -> ()' has no member 'isEnabled'
Se você deseja que o botão permaneça estático sem a aparência de "pressionado":
Lembrar:
1) Seu
IBOutlet
é ->@IBOutlet weak var editButton: UIButton!
2) O código acima entra
viewWillAppear
fonte
A maneira como faço isso é a seguinte:
O IBAction é conectado ao seu botão no storyboard.
Se você configurou o botão como um Outlet:
Em seguida, você pode acessar as propriedades habilitadas usando o. notação no nome do botão:
fonte
Desative um botão no Swift 3:
fonte
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:
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!
Ocultar sem desativar: esta abordagem oculta o botão sem desativá-lo (invisível, mas ainda pode ser tocado):
Remover: Isso removerá totalmente a visualização:
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!
fonte
Você pode ativar / desativar um botão usando
isEnabled
ouisUserInteractionEnabled
propriedade.A diferença entre os dois é:
isEnabled
é uma propriedade do UIControl (superclasse do UIButton) e tem efeitos visuais (ou seja, acinzentado) de habilitar / desabilitarisUserInteractionEnabled
é uma propriedade de UIView (superclasse de UIControl) e não tem efeito visual, embora atinja o propósitoUso:
fonte
Value of type '(AnyObject) -> ()' has no member 'isEnabled'
(_ sender: )
paraUIButton
. O erro diz:Value of type '(UIButton) -> ()' 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:Observe que você provavelmente terá outras condições dentro
if appMode == 0
e / ouif appMode == 1
que ainda ocorrerão e NÃO entrarão em conflito com omySegue
botão. Assim, EVITANDO UM CRASH .fonte
O botão pode ser desabilitado no Swift 4 pelo código
fonte
Value of type '(AnyObject) -> ()' has no member 'isEnabled'
yourButton(sender: UIButton)
. Seu código atualizado provavelmente causará o seguinte erro:Value of type '(UIButton) -> ()' has no member 'isEnabled'