Ciclo de vida do objeto: UIViewController Ao programar no iOS, it8217s é inevitável que you8217ll precise subclasse UIViewController. Essas subclasses contêm toda a lógica que faz com que seus aplicativos se vejam e se comportem como deveriam. It8217s é difícil de configurar uma subclasse sem saber quais métodos substituídos serão chamados e quando. Para remediar esta confusão potencial, esta publicação examinará o ciclo de vida de um UIViewController. Uma configuração simples É o que a nossa configuração parece no Interface Builder. Vamos examinar a Cena B. Este controlador faz parte de uma pilha UINavigationController e contém outra cena através de uma visão de recipiente. Como a maioria dos controladores, o controlador Scene B8217s possui referências a objetos criados no Interface Builder usando propriedades IBOutlet. O Controlador A Pusha para o Controlador B Quando a Cena A desencadeia um 8216show8217 segue, esses métodos substituídos são chamados no controlador Scene B8217s na seguinte ordem: initWithCoder: Ao usar storyboards, o controlador é inicializado com este método, não com o init ou initWithNibName: bundle : métodos. AwakeFromNib willMoveToParentViewController: O controlador que é passado com esta chamada é o UINavigationController. PrefereStatusBarHidden preferredStatusBarUpdateAnimation loadView UIViewController A função loadView de 8216s atribui todos os objetos com 8216Referencing Outlets8217 (também conhecido como IBOutlets) no Interface Builder para suas propriedades IBOutlet correspondentes. Se você precisa acessar esses objetos IBOutlet nesta função, ligue para o primeiro. PrepareForSegue: remetente: esta chamada nos permite inspecionar o UIStoryboardEmbedSegue que incorpora a cena menor na visão de recipiente Scene B8217s. ViewDidLoad Este método geralmente é onde a maioria de uma configuração do controller8217s acontece. Observe que todos os nossos IBOutlets foram conectados, mas nossos pontos de vista ainda não foram definidos. ExtendedLayoutIncludesOpaqueBars edgesForExtendedLayout viewWillAppear: extendedLayoutIncludesOpaqueBars edgesForExtendedLayout updateViewConstraints viewWillLayoutSubviews viewDidLayoutSubviews Animação A animação que transita da Cena A para a Cena B é executada. O Passo 18 não acontece até a animação terminar. ViewDidAppear: didMoveToParentViewController: esta chamada conclui o processo iniciado no passo 2. Aqui recebemos a mesma instância do UINavigationController. UpdateViewConstraints viewWillLayoutSubviews viewDidLayoutSubviews Isso responde algumas perguntas sobre quais chamadas são feitas primeiro, além de expor algumas peculiaridades interessantes. Várias chamadas aparentemente estão acontecendo mais de uma vez. A exibição scene8217s executa seu layout duas vezes, uma vez antes e uma vez após sua animação. A cena também consulta redundantemente o controlador sobre o layout estendido. O Controlador B empurra para o Controlador C Semelhante à nossa última transição, a Cena B agora desencadeia um 8216show8217 segue. Os métodos substituídos do controller8217s são chamados na seguinte ordem: prepareForSegue: remetente: esta chamada nos permite inspecionar o objeto UIStoryboardShowSegue que seguirá a cena C. viewWillDisappear: updateViewConstraints Animação A animação que transita da Cena B para a Cena C é executada. O Passo 5 não acontece até a animação terminar. ViewDidDisappear: sem surpresas aqui. Nós só conseguimos algumas chamadas e todos parecem fazer sentido neste contexto. Controlador C Pops para Controlador B Agora que passamos atrás da Cena B, vamos voltar. A Cena B está sendo carregada através de um pop-up UINavigationController (em oposição ao push no primeiro exemplo). Recebemos as seguintes chamadas: prefersStatusBarHidden preferredStatusBarUpdateAnimation extendedLayoutIncludesOpaqueBars edgesForExtendedLayout viewWillAppear: extendedLayoutIncludesOpaqueBars edgesForExtendedLayout updateViewConstraints viewWillLayoutSubviews viewDidLayoutSubviews Animação A animação que transita da Cena C para a Cena B é executada. O passo 12 não acontece até a animação terminar. ViewDidAppear: updateViewConstraints viewWillLayoutSubviews viewDidLayoutSubviews Estas chamadas e seu pedido devem ser bastante familiares a partir da primeira transição. Notavelmente ausente são algumas das etapas de configuração únicas. O controlador ainda está dentro do UINavigationController, portanto, não há chamadas relativas ao controlador pai. Controlador B Pops para o controlador A We8217re agora feito com o nosso controlador Scene B. Estar fora da pilha UINavigationController nos dá as seguintes chamadas: willMoveToParentViewController: O argumento do controlador de exibição nesta chamada é nulo. Isso nos diz que a Cena B está sendo removida da hierarquia. ViewWillDisappear: updateViewConstraints viewDidDisappear: Animação A animação que transita da Cena B para Scene A é executada. O Passo 6 não acontece até a animação terminar. DidMoveToParentViewController: esta chamada conclui o processo iniciado no passo 1. Aqui, recebemos o mesmo argumento nil. Dealloc Semelhante à segunda transição, esta transição parece bastante direta. Depois que o controlador é removido da hierarquia, o método dealloc é chamado como qualquer outro NSObject. Veja para si mesmo O código que eu usei para executar este teste está no meu github aqui. Sinta-se à vontade para tentar você mesmo, e insira todas as outras etapas que você usaria em seus próprios controladores. Publicação de navegação Categorias Posts recentes Eu tenho um projeto que foi construído no ano passado, e ele usa XIBs, sem storyboards. Os XIBs não usam Auto Layout, mas eles usam alguns Autosizing. Tenho um problema ao executar com o iOS7, no qual todas as visualizações estão escondidas sob a barra de status. Compreendo perfeitamente que este é um novo recurso com o iOS7, no qual isso pode ser esperado. No entanto, todas as soluções para corrigi-lo para não fazer isso não estão funcionando. Eu tenho uma imagem no topo da vista que sempre mostra sob a barra de status, e não estou usando barras de navegação ou algo assim. Eu tentei atualizar os Y-deltas no XIB (eles não têm efeito na visualização), tentei configurar as bordasForExtendedLayout para UIRectEdgeNone (não faz nada) e uma infinidade de outras coisas. Toda vez, a barra de status mostra com a vista escondida sob isso, não importa o que eu faça. Isto é, a menos que eu mova manualmente para baixo a vista no XIB para permitir espaço para a barra de status (mas essa solução não funciona porque ele não parece direito no iOS6, é claro). O que é estranho é que, mesmo quando eu tento uma linha de código para cortar em um turno de exibição, ele não funciona (como o seguinte): Não que eu fosse com esse tipo de solução, mas é estranho que não funcionasse (o Apenas tempo eu normalmente vejo que não funciona é se Auto Layout está no lugar, que não é neste caso). É um requisito de design que a barra de status mostra, e estou apenas perplexo porque não consigo configurar a exibição para estar sob a barra de status do iOS7. Eu li todas as publicações de Depuração de pilha no assunto, bem como as instruções de transição das maçãs. Mais uma vez, para reiterar, compreendo perfeitamente como deve funcionar e qual a solução esperada para isso, mas nada disso parece estar funcionando para este projeto em particular. Eu sou um experiente iOS dev, mas este projeto foi construído por outra equipe, então eu não sei se há algo escondido em algum lugar nos arquivos XIB, plist ou código que poderia superar as configurações acima. Por favor, deixe-me saber se há algo mais que pode ser analisado sobre isso, ou mais informações que posso fornecer. Agradeço antecipadamente perguntou 24 de setembro às 19:21 A Apple está empurrando você para usar autolayout para realizar isso. Você precisa definir uma restrição no Guia de layout superior da subvista superior em sua exibição. Veja este documento por exemplos: Para fazer isso sem XIBs, você precisará adicionar a restrição programaticamente. As maçãs docs dão um bom exemplo disto, que eu resumi abaixo. Dando que o TopLayoutGuide é uma propriedade em um controlador de exibição, você apenas usa isso em seu dicionário de ligações variáveis. Então você configura sua restrição como normal:
O Frankfort Intraday Forex Breakout Strategy A natureza de ritmo rápido da negociação Forex intradiária se presta a estratégias simples que não passam ao mar nos indicadores. Quando comercializado nos mercados certos nos momentos certos, uma simples estratégia de breakout baseada em preços pode gerar lucros muito impressionantes. No início desta semana, o usuário da Forex Factory PIP Combine publicou uma estratégia de breakout simples que segue essa linha de pensamento. Em sua experiência de Forex, a PIP Combine percebeu que a vela de 6 am (Londres) 1 am (Nova York) tende a desempenhar um papel importante em termos de suporte intradiário e resistência. A partir dessa observação, ele acredita que uma fuga acima do alto ou abaixo do baixo dessa vela tem uma forte probabilidade de resultar em um comércio lucrativo. Embora esta estratégia esteja longe de negociável como agora, poderia nos fornecer um estudo de caso interessante à medida que o PIP Combine o desenvolve ao longo do tempo. O u
Comments
Post a Comment