O protocolo UIAppearance apareceu no iOS 5 em 2011, naqueles momentos distantes em que o Instagram não tinha um aplicativo Android, e o serial Ned Stark ainda não estava cortado.
Sobre EddardOs mestres me enviaram um corvo com a notícia de que no momento do lançamento do iOS 5, eles já haviam sido cortados. Mas, para não estragar o casamento vermelho ou qualquer outra coisa, talvez eu deixe tudo como está.
Há informações, tutoriais, artigos sobre este tópico, todo desenvolvedor iniciante do iOS sabe como e por que usá-lo, portanto, este artigo não é sobre isso. Eu gostaria de refletir sobre o tema do que está errado com ele e por que a Apple não presta atenção nisso.
Como uma pequena introdução, trechos da documentação que sempre foram, são e devem ser a principal fonte confiável de informações.
Você pode personalizar a aparência das instâncias de uma classe enviando mensagens de modificação de aparência para o proxy de aparência da classe.
Para oferecer suporte à personalização da aparência, uma classe deve estar em conformidade com o protocolo UIAppearanceContainer e os métodos relevantes do acessador devem ser marcados com UI_APPEARANCE_SELECTOR
Para mim, eu entendo desta maneira: se você deseja alterar a aparência padrão para todos os objetos da classe que implementa UIAppearance , verifique se a propriedade está marcada com UI_APPEARANCE_SELECTOR e vá. Portanto, se a propriedade não for UI_APPEARANCE_SELECTOR , isso não funcionará.
Mas "não obtém sucesso" não significa "você não pode tentar", então sugiro que todos tenham curiosidade em fazer um experimento simples: abra o primeiro projeto obtido e adicione a seguinte linha ao application:didFinishLaunchingWithOptions:
method
UIView.appearance().isHidden = true
Estime o que vai acontecer e corra.
Eu, como um furo, esperava opções possíveis:
- nada acontece;
- nada acontece, mas um log como "isHidden não é UI_APPEARANCE_SELECTOR, estúpido" cai no console;
- O aplicativo captura um erro crítico ou afirma com uma mensagem semelhante.
Mas não, tudo, incluindo a janela principal do aplicativo, fica oculto. Por um lado, é até lógico - o que está escrito está feito. Mas, por outro lado, parece um comportamento não documentado e, parece-me, um buraco bastante grande como esse.
Eu ainda poderia concordar com o fato de que, se esses truques pudessem ser rotacionados apenas com as propriedades que afetam a aparência, mas isso pode ser feito com todas as propriedades !
Por exemplo, adicionando ao código que outros projetos usam como uma biblioteca de terceiros, aqui está uma linha que às vezes é chamada em um momento aleatório no tempo:
UITableView.appearance().delegate = nil
Você pode redefinir todos os delegados para todas as tabelas que aparecem na tela após a execução desse código.
Os desenvolvedores vão se divertir muito tentando descobrir o que aconteceu! Certamente, você pode criar algo ainda mais divertido!
Eu realmente espero que essas coisas não tenham passado despercebidas pela Apple (não encontrei nenhuma informação sobre este tópico), e esses truques são revelados em algum momento do estágio de verificação automática de montagem no AppstoreConnect. Mas, para ser sincero, não tenho vontade de checar.
Coisas essas caras. Ficarei feliz em discutir se alguém também está interessado no tópico.
PS Devolva-me o meu 2011!