Editar
Agora está fixado em ios7.1
Não faça nenhum ajuste para consertar.
Edit2
Aparentemente, o mesmo problema acontece novamente no iOS 8.0 e 8.1
Edit3
Agora está fixado em ios9.2
Não faça nenhum ajuste para consertar.
Oi Hoje eu visto em UISwitch's
eventos ValueChanged:
de chamada continuously
, enquanto eu sou a mudança para On
a Off
ou Off
para On e meu dedo se moveu ainda no lado direito, bem como do lado esquerdo. Eu anexei a imagem GIF para mais clara com NSLog.
Meu método de alteração de valor é:
- (IBAction)changeSwitch:(id)sender{
if([sender isOn]){
NSLog(@"Switch is ON");
} else{
NSLog(@"Switch is OFF");
}
}
iOS6 o mesmo código de Switch funcionando bem como esperamos:
então, alguém pode me sugerir que a chamada apenas uma vez esteja ligada ou desligada. ou isso é um bug ou o quê ..?
ATUALIZAR
Aqui está a minha demonstração disso:
Respostas:
Por favor, veja o seguinte código:
fonte
Mesmo bug aqui. Acho que encontrei uma solução alternativa simples. Só precisamos usar um novo
BOOL
que armazene o estado anterior doUISwitch
e uma instrução if em nossoIBAction
(Valor alterado disparado) para verificar se o valor do switch realmente mudou.Não há mais comportamentos estranhos. Espero que ajude.
fonte
Você pode usar o
UISwitch
's.selected
propriedade para certificar-se de seu código executa somente uma vez quando o valor de mudanças reais. Acho que essa é uma ótima solução porque evita ter que criar subclasses ou adicionar novas propriedades.E aqui está em Swift:
fonte
Se você estiver usando tantos interruptores em seu aplicativo, então há um problema para alterar o código em todos os lugares onde o método de ação do UISwitch é definido. Você pode fazer alternância personalizada e lidar com os eventos somente se o valor mudar.
CustomSwitch.h
CustomSwitch.m
Estamos ignorando eventos se o valor for igual ao valor alterado. Coloque CustomSwitch em toda a classe de UISwitch no storyboard. Isso resolverá o problema e chamará o destino apenas uma vez quando o valor for alterado
fonte
Eu tenho muitos usuários que enfrentam o mesmo problema, então pode ser que seja um bug de
UISwitch
então eu encontrei agora para solução temporária do mesmo. Eu encontrei um usogitHub
personalizadoKLSwitch
para agora, espero que a apple conserte isso na próxima atualização do xCode: -https://github.com/KieranLafferty/KLSwitch
fonte
Se você não precisa reagir instantaneamente à mudança de valor do switch, o seguinte pode ser uma solução:
fonte
Este problema ainda existia no iOS 9.3 beta. Se você não se importa que o usuário não consiga arrastar para fora do switch, acho que usar, em
.TouchUpInside
vez de.ValueChanged
funcionar, é confiável.fonte
Ainda estou enfrentando o mesmo problema no iOS 9.2
Eu tenho a solução e poso como se pudesse ajudar outras pessoas
Crie uma variável de contagem para rastrear o número de vezes que o método foi chamado
Salve o valor bool para o valor da chave
No método de mudança de valor de Switch, execute a ação desejada apenas para a primeira chamada de método. Quando o valor de troca muda novamente o valor do conjunto de contagem e o valor da variável bool para o padrão
fonte
Esse problema me incomoda quando vinculo a chave a outros comportamentos. Geralmente as coisas não gostam de ir de
on
paraon
. Esta é minha solução simples:Apenas certifique-se de definir
self.lastSwitchState
sempre que você mudar manualmentemySwitch.on
! :)fonte
Esse tipo de problema geralmente é causado por ValueChanged. Você não precisa pressionar o botão para fazer com que a função seja executada. Não é um evento de toque. Cada vez que você altera programaticamente a chave para on / off, o valor muda e ele chama a função IBAction novamente.
@RoNiT teve a resposta certa com:
Rápido
fonte
Isso funciona bem e não chama a função do seletor novamente.
fonte
Isso funcionou para mim.
fonte