bordas para layout estendido.
As arestas que você estende para o controlador de exibição.
Declaração.
Discussão.
Em vez dessa propriedade, use a área segura de sua visualização para determinar quais partes da sua interface estão ocluídas por outro conteúdo. Para obter mais informações, consulte o Guia de Layout de Área seguro e as propriedades de Inserções de Área seguras do UIView.
No iOS 10 e versões anteriores, use essa propriedade para informar quais bordas do controlador de exibição estendem sob as barras de navegação ou outras exibições fornecidas pelo sistema. O valor padrão desta propriedade é tudo, e é recomendável que você não altere esse valor.
Se você remover um valor de borda dessa propriedade, o sistema não colocará seu conteúdo abaixo de outras barras nessa mesma borda. Além disso, o sistema fornece um fundo padrão para que as barras translúcidas tenham uma aparência apropriada. O controlador de visualização raiz da janela não reage a essa propriedade.
Configurar o comportamento de layout da vista.
Um valor booleano que indica se o layout estendido inclui ou não barras opacas.
Chamado para notificar o controlador de visualização de que sua visualização está prestes a estruturar suas subvisualizações.
Chamado para notificar o controlador de visualização de que sua visualização acabou de exibir suas subvisualizações.
Chamado quando a view do controller view precisa atualizar suas restrições.
Definir limites para o layout avançado do ios 6
Eu tenho um controlador de visualização que foi escrito nos dias do iOS 5 e estou tentando fazer a transição para o iOS 7. Depois de ler o guia de transição do iOS 7 e explorar o SO, descobri que preciso definir o novo iOS 7 propriedade edgesForExtendedLayout para UIRectEdgeNone para impedir que uma das minhas subvisualizações personalizadas apareça 49 pixels mais no iOS 7 do que aparece no iOS 6. No entanto, depois de definir essa propriedade, minha subvisualização personalizada ainda está aparecendo 49 pixels acima no iOS 7 e eu don ' Não sei o que mais preciso fazer. Aqui está o meu código simples que adicionei ao meu método viewDidLoad.
e aqui está o código para criar e adicionar a subvisualização personalizada que está aparecendo mais no iOS 7.
Outro detalhe importante, se ajudar, é que essa visualização é criada a partir de um arquivo de ponta, mas a subvisualização personalizada que está aparecendo mais no iOS 7 do que no iOS 6 é a única subvisualização criada e adicionada programaticamente no viewDidLoad, depois de definir propriedade edgesForExtendedLayout. Todas as outras subvisualizações criadas a partir da ponta não são afetadas, independentemente de eu definir ou não a propriedade egdesForExtendedLayout.
Minhas duas perguntas são.
Por que minha subvisualização personalizada aparece mais alta no iOS 7 mesmo depois de definir a propriedade edgesForExtendedLayout como UIRectEdgeNone? Por que as outras subvisualizações (as subvisões carregadas a partir da ponta) não aparecem mais no iOS 7?
Xamarin Blog.
iOS 6 e # 038; 7 dicas de compatibilidade.
Em apenas alguns meses, o iOS 7 encontrou seu caminho para mais de 80% de todos os dispositivos iOS. A Xamarin anunciou o suporte no mesmo dia quando o iOS 7 foi lançado e é fácil atualizar seu aplicativo ao desenvolver com o Xamarin. iOS. A Apple recomenda primeiro redesenhar seu aplicativo para o iOS 7 e, em seguida, se você tiver alterações estruturais ou de navegação para trazê-los para a versão 6 do iOS, onde eles são apropriados. A Apple não recomenda o restyling de sua versão iOS 6 do seu aplicativo com elementos de design do iOS 7, como botões de barra sem borda. Aqui estão algumas dicas rápidas de interface de usuário para ajudá-lo com sua transição e compatibilidade.
Números de versão:
Determinar a versão do iOS é importante quando você está acessando novas APIs. Se você tentar chamar uma API do iOS 7 em um dispositivo que executa uma versão mais antiga, isso pode causar falha no aplicativo se não for manipulado corretamente. Portanto, é importante sempre verificar o número correto da versão usando este método auxiliar simples:
Para facilitar, você pode tornar isso um método estático em uma classe de utilitário. Eu chamei o meu Util. cs e adicionei o seguinte método para verificar se o dispositivo atual é o iOS 7 ou mais recente.
Isso permitirá que você faça chamadas específicas com base na versão do sistema operacional:
Carregando recursos:
Em alguns casos, você pode precisar carregar recursos ou recursos diferentes para versões mais antigas do iOS. Nos ícones do iOS 7, siga um estilo de design fino em comparação com versões mais antigas do iOS. Para garantir que seus usuários tenham os ícones corretos com base em sua versão, você pode considerar a marcação de todos os seus ativos específicos do iOS com um prefixo como & # 8220; ios7 _ & # 8221 ;. Isso permitirá que você carregue os ícones condicionalmente, como adicionar um UIBarButtonItem ao NavigationBar:
Além disso, você pode criar um método auxiliar para retornar o nome correto.
Visualizar as alterações do controlador:
As visualizações no iOS 7 usam layouts de tela cheia, se você estiver atualmente especificando WantsFullScreenLayout = true, o controlador de exibição poderá exibir seu conteúdo em um local de tela inesperado quando for executado no iOS 7. No entanto, você pode ajustar como um controlador de exibição exibe suas visualizações . Todos os UIViewController fornecem estas propriedades:
Se você criou UIViewControllers personalizados, este será seu novo melhor amigo. Já que o iOS 7 UIViewControls passa para o NavigationBar. É comum que sua interface de usuário possa estar escondida sob ela. Definir essa propriedade como UIRectEdge. None forçará o iOS 7 a não colocar seu conteúdo sob o NavigationBar.
Se você estiver usando barras opacas, defina não apenas EdgesForExtendedLayout, mas também defina ExtendedLayoutIncludesOpaqueBars como true, pois o valor padrão é false.
ScrollViews agora ajusta automaticamente suas inserções no iOS 7. Se você não deseja isso, você vai querer definir essa propriedade como false.
Para todos esses, você deve garantir que você esteja agrupando as propriedades em uma verificação de versão:
Definir limites para o layout avançado do ios 6
A partir do iOS7, os controladores de visualização usam layout de tela inteira por padrão. Ao mesmo tempo, você tem mais controle sobre como expõe seus pontos de vista e isso é feito com essas propriedades:
Basicamente, com essa propriedade, você define quais lados da sua exibição podem ser estendidos para cobrir toda a tela. Imagine que você envie um UIViewController para um UINavigationController. Quando a visualização desse controlador de exibição é exibida, ele será iniciado onde a barra de navegação termina, mas essa propriedade definirá quais lados da exibição (superior, esquerda, inferior, direita) podem ser estendidos para preencher a tela inteira.
Vamos ver isso com um exemplo:
Aqui você não está definindo o valor de edgesForExtendedLayout, portanto, o valor padrão é obtido (UIRectEdgeAll), portanto, a exibição estende seu layout para preencher toda a tela.
Este é o resultado:
Como você pode ver, o fundo vermelho se estende por trás da barra de navegação e da barra de status.
Agora, você vai definir esse valor para UIRectEdgeNone, então você está dizendo ao controlador de exibição para não estender a visão para cobrir a tela:
Esta propriedade é usada quando sua visão é um UIScrollView ou similar, como um UITableView. Você quer que sua tabela comece onde a barra de navegação termina, porque você não verá todo o conteúdo se não, mas ao mesmo tempo você quer que sua tabela cubra toda a tela ao rolar. Nesse caso, configurar edgesForExtendedLayout para None não funcionará porque sua tabela iniciará a rolagem onde a barra de navegação termina e não passará por ela.
Aqui é onde esta propriedade vem a calhar, se você deixar o controlador de visualização ajustar automaticamente as inserções (definindo essa propriedade como YES, também o valor padrão), ele adicionará inserções à parte superior da tabela, portanto a tabela iniciará onde a navegação a barra termina, mas o pergaminho cobrirá a tela inteira.
É quando está definido como NO:
E SIM (por padrão):
Em ambos os casos, a tabela rola atrás da barra de navegação, mas no segundo caso (YES), ela será iniciada abaixo da barra de navegação.
Este valor é apenas um acréscimo aos anteriores. Por padrão, esse parâmetro está definido como NO. Se a barra de status for opaca, as visualizações não serão estendidas para incluir a barra de status, mesmo se você estender sua exibição para cobri-la (edgesForExtendedLayout para UIRectEdgeAll).
Se você definir o valor como YES, isso permitirá que a visualização passe por baixo da barra de status novamente.
Se algo não estiver claro, escreva um comentário e eu responderei.
Como o iOS sabe o que o UIScrollView deve usar?
O iOS captura a primeira subvisualização na visualização do seu ViewController, aquela no índice 0, e se for uma subclasse do UIScrollView, aplica as propriedades explicadas a ele.
Obviamente, isso significa que o UITableViewController funciona por padrão (já que o UITableView é a primeira visualização).
Controlador UIView.
Um objeto que gerencia uma hierarquia de visualizações para seu aplicativo UIKit.
A classe UIView Controller define o comportamento compartilhado que é comum a todos os controladores de visualização. Você raramente cria instâncias da classe UIView Controller diretamente. Em vez disso, você subclasse o UIView Controller e adiciona os métodos e propriedades necessários para gerenciar a hierarquia de visualizações do controlador de exibição.
As principais responsabilidades de um controlador de visualização incluem o seguinte:
Atualizando o conteúdo das visualizações, geralmente em resposta a alterações nos dados subjacentes.
Respondendo a interações do usuário com visualizações.
Redimensionando vistas e gerenciando o layout da interface geral.
Coordenando com outros objetos, incluindo outros controladores de visualização, no seu aplicativo.
Um controlador de visualização está fortemente vinculado às visualizações que gerencia e participa do tratamento de eventos em sua hierarquia de exibição. Especificamente, os controladores de visualização são objetos UIResponder e são inseridos na cadeia de respostas entre a visualização raiz do controlador de visualização e a superview dessa exibição, que normalmente pertence a um controlador de exibição diferente. Se nenhuma das exibições do controlador de exibição manipular um evento, o controlador de visualização terá a opção de manipular o evento ou transmiti-lo para a supervisualização.
Controladores de visualização raramente são usados isoladamente. Em vez disso, você costuma usar vários controladores de visualização, cada um deles com uma parte da interface do usuário do seu aplicativo. Por exemplo, um controlador de exibição pode exibir uma tabela de itens, enquanto um controlador de exibição diferente exibe o item selecionado dessa tabela. Geralmente, apenas as visualizações de um controlador de exibição estão visíveis por vez. Um controlador de visualização pode apresentar um controlador de visualização diferente para exibir um novo conjunto de visualizações ou pode atuar como um contêiner para o conteúdo de outros controladores de visualização e para animar as visualizações que desejar.
Notas de subclassificação.
Cada aplicativo contém pelo menos uma subclasse personalizada do UIView Controller. Com mais frequência, os aplicativos contêm muitos controladores de exibição personalizados. Os controladores de visualização personalizados definem os comportamentos gerais do seu aplicativo, incluindo a aparência do aplicativo e como ele responde às interações do usuário. As seções a seguir fornecem uma breve visão geral de algumas das tarefas que sua subclasse customizada executa. Para obter informações detalhadas sobre como usar e implementar os controladores de exibição, consulte View Controller Programming Guide for iOS.
Exibir gerenciamento.
Cada controlador de exibição gerencia uma hierarquia de exibição, cuja visão raiz é armazenada na propriedade view dessa classe. A visualização raiz atua principalmente como um contêiner para o restante da hierarquia de exibição. O tamanho e a posição da visualização raiz são determinados pelo objeto que a possui, que é um controlador de exibição pai ou a janela do aplicativo. O controlador de visualização de propriedade da janela é o controlador de visualização raiz do aplicativo e sua visualização é dimensionada para preencher a janela.
Controladores de visualização carregam suas visualizações preguiçosamente. Acessar a propriedade de exibição pela primeira vez carrega ou cria as exibições do controlador de exibição. Existem várias maneiras de especificar as visualizações para um controlador de visualização:
Especifique o controlador de visualização e suas visualizações no storyboard do seu aplicativo. Os storyboards são a maneira preferida de especificar suas visualizações. Com um storyboard, você especifica as visualizações e suas conexões com o controlador de visualização. Você também especifica os relacionamentos e os seguimentos entre os controladores de visualização, o que facilita a visualização e a modificação do comportamento do aplicativo.
Para carregar um controlador de visualização a partir de um storyboard, chame o método View Controller do instantiate (com Identifier :) do objeto apropriado do UIStoryboard. O objeto de storyboard cria o controlador de visualização e o retorna ao seu código.
Especifique as visualizações para um controlador de visualização usando um arquivo Nib. Um arquivo de nib permite especificar as exibições de um único controlador de exibição, mas não permite definir seguimentos ou relacionamentos entre os controladores de exibição. O arquivo nib também armazena apenas informações mínimas sobre o próprio controlador de visualização.
Para inicializar um objeto do controlador de exibição usando um arquivo de nib, crie sua classe de controlador de exibição programaticamente e inicialize-a usando o método init (nib Name: bundle :). Quando suas visualizações são solicitadas, o controlador de visualização as carrega do arquivo de nib.
Especifique as visualizações para um controlador de visualização usando o método View () de carga. Nesse método, crie sua hierarquia de visualização programaticamente e atribua a visualização raiz dessa hierarquia à propriedade de exibição do controlador de exibição.
Todas essas técnicas têm o mesmo resultado final, que é criar o conjunto apropriado de exibições e expô-las por meio da propriedade de exibição.
Um controlador de visualização é o único proprietário de sua visualização e quaisquer subvisualizações criadas. Ele é responsável por criar essas visualizações e por renunciar à propriedade delas nos momentos apropriados, como quando o próprio controlador de visualização é liberado. Se você usar um storyboard ou um arquivo de ponta para armazenar seus objetos de visualização, cada objeto do controlador de visualização obterá automaticamente sua própria cópia dessas visualizações quando o controlador de visualização as solicitar. No entanto, se você criar suas visualizações manualmente, cada controlador de visualização deverá ter seu próprio conjunto exclusivo de visualizações. Você não pode compartilhar exibições entre os controladores de exibição.
A visualização raiz de um controlador de visualização é sempre dimensionada para caber no espaço atribuído. Para outras visualizações na hierarquia de visualizações, use o Interface Builder para especificar as restrições de layout automático que determinam como cada vista é posicionada e dimensionada dentro dos limites da supervisualização. Você também pode criar restrições programaticamente e adicioná-las às suas exibições nos momentos apropriados. Para obter mais informações sobre como criar restrições, consulte o Guia de layout automático.
Tratamento de Notificações Relacionadas à Visualização.
Quando a visibilidade de suas visualizações muda, um controlador de visualização chama automaticamente seus próprios métodos para que as subclasses possam responder à mudança. Use um método como a visualização Aparecerá (_ :) para preparar suas exibições para aparecer na tela e usar a visualização Desaparecerá (_ :) para salvar as alterações ou outras informações de estado. Use outros métodos para fazer as alterações apropriadas.
A Figura 1 mostra os possíveis estados visíveis das exibições de um controlador de exibição e as transições de estado que podem ocorrer. Nem todos os métodos de retorno de chamada "em" serão combinados com apenas um método de retorno de chamada "did". Você precisa garantir que, se iniciar um processo em um método de retorno de chamada "vai", você finalizará o processo nos métodos de retorno de chamada "feito" correspondente e o oposto "vai".
Transições de estado válidas.
Manipulando Rotações de Visualização.
No iOS 8, todos os métodos relacionados à rotação são reprovados. Em vez disso, as rotações são tratadas como uma alteração no tamanho da visualização do controlador de exibição e, portanto, são relatadas usando a exibição Método de Transição (para: com :). Quando a orientação da interface muda, o UIKit chama esse método no controlador de visualização raiz da janela. Esse controlador de visualização notifica seus controladores de exibição filho, propagando a mensagem por toda a hierarquia do controlador de exibição.
No iOS 6 e no iOS 7, seu aplicativo suporta as orientações de interface definidas no arquivo Info. plist do seu aplicativo. Um controlador de visualização pode substituir o método de Orientações da Interface suportado para limitar a lista de orientações suportadas. Normalmente, o sistema chama esse método somente no controlador de visualização raiz da janela ou em um controlador de exibição apresentado para preencher a tela inteira; Os controladores de visualização filho usam a parte da janela fornecida por seu controlador de visualização pai e não participam mais diretamente das decisões sobre quais rotações são suportadas. A interseção da máscara de orientação do aplicativo e da máscara de orientação do controlador de visualização é usada para determinar em quais orientações um controlador de visão pode ser rotacionado.
Você pode substituir a orientação de interface preferencial para apresentação de um controlador de exibição que deve ser apresentado em tela inteira em uma orientação específica.
Quando ocorre uma rotação para um controlador de visualização visível, o Rotacionará (para: duração :), Animate Rotation (para: duration :) e os métodos Rotate (from :) serão chamados durante a rotação. A view O método Layout Subviews () também é chamado depois que a view é redimensionada e posicionada por seu pai. Se um controlador de visualização não estiver visível quando ocorrer uma alteração de orientação, os métodos de rotação nunca serão chamados. No entanto, a exibição será chamada quando a exibição se tornar visível. Sua implementação desse método pode chamar o método de orientação da barra de status para determinar a orientação do dispositivo.
No momento do lançamento, os aplicativos devem sempre configurar sua interface em uma orientação retrato. Depois que o aplicativo (_: o método Finish Launching With Options :) for retornado, o aplicativo usará o mecanismo de rotação do controlador de exibição descrito acima para rotacionar as vistas para a orientação apropriada antes de mostrar a janela.
Implementando um controlador de exibição de contêiner.
Uma subclasse personalizada do UIView Controller também pode atuar como um controlador de exibição de contêiner. Um controlador de exibição de contêiner gerencia a apresentação do conteúdo de outros controladores de visualização que possui, também conhecidos como controladores de exibição filho. A visão de uma criança pode ser apresentada como está ou em conjunto com as visualizações de propriedade do controlador de exibição de contêiner.
Sua subclasse de controlador de exibição de contêiner deve declarar uma interface pública para associar seus filhos. A natureza desses métodos depende de você e depende da semântica do contêiner que você está criando. Você precisa decidir quantos filhos podem ser exibidos pelo seu controlador de exibição de uma vez, quando esses filhos são exibidos e onde eles aparecem na hierarquia de visualizações do controlador de visualizações. Sua classe de controlador de exibição define quais relacionamentos, se houver, são compartilhados pelos filhos. Ao estabelecer uma interface pública limpa para seu contêiner, você garante que as crianças usem seus recursos logicamente, sem acessar muitos detalhes particulares sobre como seu contêiner implementa o comportamento.
Seu controlador de exibição de contêiner deve associar um controlador de exibição filho a ele mesmo antes de adicionar a visualização raiz do filho à hierarquia de exibição. Isso permite que o iOS direcione adequadamente os eventos para os controladores de exibição filho e as visualizações que esses controladores gerenciam. Da mesma forma, depois de remover a visualização raiz de um filho de sua hierarquia de exibição, ele deve desconectar esse controlador de exibição secundária de si mesmo. Para criar ou quebrar essas associações, seu contêiner chama métodos específicos definidos pela classe base. Esses métodos não devem ser chamados por clientes de sua classe de contêiner; eles devem ser usados apenas pela implementação do contêiner para fornecer o comportamento esperado de contenção.
Aqui estão os métodos essenciais que você pode precisar chamar:
Você não é obrigado a substituir quaisquer métodos ao criar um controlador de exibição de contêiner.
Por padrão, retornos de chamada de rotação e aparência são automaticamente encaminhados para filhos. Você pode, opcionalmente, substituir os Métodos de Rotação de Encaminhamento Automático () e deve encaminhar métodos de Aparência Automática para assumir o controle desse comportamento por conta própria.
Gerenciamento de Memória.
A memória é um recurso essencial no iOS e os controladores de visualização fornecem suporte integrado para reduzir o espaço ocupado pela memória em momentos críticos. A classe UIView Controller fornece algum tratamento automático de condições de pouca memória através do método Receive Memory Warning (), que libera memória desnecessária.
Preservação e Restauração do Estado.
Se você atribuir um valor à propriedade Identificador de restauração do controlador de visualização, o sistema poderá solicitar que o controlador de visualização codifique a si mesmo quando o aplicativo fizer a transição para o segundo plano. Quando preservado, um controlador de visualização preserva o estado de quaisquer visualizações em sua hierarquia de exibição que também possuam identificadores de restauração. Controladores de visualização não salvam automaticamente nenhum outro estado. Se você estiver implementando um controlador de exibição de contêiner personalizado, será necessário codificar qualquer controlador de exibição filho por conta própria. Cada criança que você codifica deve ter um identificador de restauração exclusivo.
Para obter mais informações sobre como o sistema determina quais controladores de visualização preservar e restaurar, consulte o Guia de programação de aplicativos para iOS.
A partir do iOS7, os controladores de visualização usam layout de tela inteira por padrão. Ao mesmo tempo, você tem mais controle sobre como expõe seus pontos de vista e isso é feito com essas propriedades:
Basicamente, com essa propriedade, você define quais lados da sua exibição podem ser estendidos para cobrir toda a tela. Imagine que você envie um UIViewController para um UINavigationController. Quando a visualização desse controlador de exibição é exibida, ele será iniciado onde a barra de navegação termina, mas essa propriedade definirá quais lados da exibição (superior, esquerda, inferior, direita) podem ser estendidos para preencher a tela inteira.
Vamos ver isso com um exemplo:
Aqui você não está definindo o valor de edgesForExtendedLayout, portanto, o valor padrão é obtido (UIRectEdgeAll), portanto, a exibição estende seu layout para preencher toda a tela.
Este é o resultado:
Como você pode ver, o fundo vermelho se estende por trás da barra de navegação e da barra de status.
Agora, você vai definir esse valor para UIRectEdgeNone, então você está dizendo ao controlador de exibição para não estender a visão para cobrir a tela:
Esta propriedade é usada quando sua visão é um UIScrollView ou similar, como um UITableView. Você quer que sua tabela comece onde a barra de navegação termina, porque você não verá todo o conteúdo se não, mas ao mesmo tempo você quer que sua tabela cubra toda a tela ao rolar. Nesse caso, configurar edgesForExtendedLayout para None não funcionará porque sua tabela iniciará a rolagem onde a barra de navegação termina e não passará por ela.
Aqui é onde esta propriedade vem a calhar, se você deixar o controlador de visualização ajustar automaticamente as inserções (definindo essa propriedade como YES, também o valor padrão), ele adicionará inserções à parte superior da tabela, portanto a tabela iniciará onde a navegação a barra termina, mas o pergaminho cobrirá a tela inteira.
É quando está definido como NO:
E SIM (por padrão):
Em ambos os casos, a tabela rola atrás da barra de navegação, mas no segundo caso (YES), ela será iniciada abaixo da barra de navegação.
Este valor é apenas um acréscimo aos anteriores. Por padrão, esse parâmetro está definido como NO. Se a barra de status for opaca, as visualizações não serão estendidas para incluir a barra de status, mesmo se você estender sua exibição para cobri-la (edgesForExtendedLayout para UIRectEdgeAll).
Se você definir o valor como YES, isso permitirá que a visualização passe por baixo da barra de status novamente.
Se algo não estiver claro, escreva um comentário e eu responderei.
Como o iOS sabe o que o UIScrollView deve usar?
O iOS captura a primeira subvisualização na visualização do seu ViewController, aquela no índice 0, e se for uma subclasse do UIScrollView, aplica as propriedades explicadas a ele.
Obviamente, isso significa que o UITableViewController funciona por padrão (já que o UITableView é a primeira visualização).
Controlador UIView.
Um objeto que gerencia uma hierarquia de visualizações para seu aplicativo UIKit.
A classe UIView Controller define o comportamento compartilhado que é comum a todos os controladores de visualização. Você raramente cria instâncias da classe UIView Controller diretamente. Em vez disso, você subclasse o UIView Controller e adiciona os métodos e propriedades necessários para gerenciar a hierarquia de visualizações do controlador de exibição.
As principais responsabilidades de um controlador de visualização incluem o seguinte:
Atualizando o conteúdo das visualizações, geralmente em resposta a alterações nos dados subjacentes.
Respondendo a interações do usuário com visualizações.
Redimensionando vistas e gerenciando o layout da interface geral.
Coordenando com outros objetos, incluindo outros controladores de visualização, no seu aplicativo.
Um controlador de visualização está fortemente vinculado às visualizações que gerencia e participa do tratamento de eventos em sua hierarquia de exibição. Especificamente, os controladores de visualização são objetos UIResponder e são inseridos na cadeia de respostas entre a visualização raiz do controlador de visualização e a superview dessa exibição, que normalmente pertence a um controlador de exibição diferente. Se nenhuma das exibições do controlador de exibição manipular um evento, o controlador de visualização terá a opção de manipular o evento ou transmiti-lo para a supervisualização.
Controladores de visualização raramente são usados isoladamente. Em vez disso, você costuma usar vários controladores de visualização, cada um deles com uma parte da interface do usuário do seu aplicativo. Por exemplo, um controlador de exibição pode exibir uma tabela de itens, enquanto um controlador de exibição diferente exibe o item selecionado dessa tabela. Geralmente, apenas as visualizações de um controlador de exibição estão visíveis por vez. Um controlador de visualização pode apresentar um controlador de visualização diferente para exibir um novo conjunto de visualizações ou pode atuar como um contêiner para o conteúdo de outros controladores de visualização e para animar as visualizações que desejar.
Notas de subclassificação.
Cada aplicativo contém pelo menos uma subclasse personalizada do UIView Controller. Com mais frequência, os aplicativos contêm muitos controladores de exibição personalizados. Os controladores de visualização personalizados definem os comportamentos gerais do seu aplicativo, incluindo a aparência do aplicativo e como ele responde às interações do usuário. As seções a seguir fornecem uma breve visão geral de algumas das tarefas que sua subclasse customizada executa. Para obter informações detalhadas sobre como usar e implementar os controladores de exibição, consulte View Controller Programming Guide for iOS.
Exibir gerenciamento.
Cada controlador de exibição gerencia uma hierarquia de exibição, cuja visão raiz é armazenada na propriedade view dessa classe. A visualização raiz atua principalmente como um contêiner para o restante da hierarquia de exibição. O tamanho e a posição da visualização raiz são determinados pelo objeto que a possui, que é um controlador de exibição pai ou a janela do aplicativo. O controlador de visualização de propriedade da janela é o controlador de visualização raiz do aplicativo e sua visualização é dimensionada para preencher a janela.
Controladores de visualização carregam suas visualizações preguiçosamente. Acessar a propriedade de exibição pela primeira vez carrega ou cria as exibições do controlador de exibição. Existem várias maneiras de especificar as visualizações para um controlador de visualização:
Especifique o controlador de visualização e suas visualizações no storyboard do seu aplicativo. Os storyboards são a maneira preferida de especificar suas visualizações. Com um storyboard, você especifica as visualizações e suas conexões com o controlador de visualização. Você também especifica os relacionamentos e os seguimentos entre os controladores de visualização, o que facilita a visualização e a modificação do comportamento do aplicativo.
Para carregar um controlador de visualização a partir de um storyboard, chame o método View Controller do instantiate (com Identifier :) do objeto apropriado do UIStoryboard. O objeto de storyboard cria o controlador de visualização e o retorna ao seu código.
Especifique as visualizações para um controlador de visualização usando um arquivo Nib. Um arquivo de nib permite especificar as exibições de um único controlador de exibição, mas não permite definir seguimentos ou relacionamentos entre os controladores de exibição. O arquivo nib também armazena apenas informações mínimas sobre o próprio controlador de visualização.
Para inicializar um objeto do controlador de exibição usando um arquivo de nib, crie sua classe de controlador de exibição programaticamente e inicialize-a usando o método init (nib Name: bundle :). Quando suas visualizações são solicitadas, o controlador de visualização as carrega do arquivo de nib.
Especifique as visualizações para um controlador de visualização usando o método View () de carga. Nesse método, crie sua hierarquia de visualização programaticamente e atribua a visualização raiz dessa hierarquia à propriedade de exibição do controlador de exibição.
Todas essas técnicas têm o mesmo resultado final, que é criar o conjunto apropriado de exibições e expô-las por meio da propriedade de exibição.
Um controlador de visualização é o único proprietário de sua visualização e quaisquer subvisualizações criadas. Ele é responsável por criar essas visualizações e por renunciar à propriedade delas nos momentos apropriados, como quando o próprio controlador de visualização é liberado. Se você usar um storyboard ou um arquivo de ponta para armazenar seus objetos de visualização, cada objeto do controlador de visualização obterá automaticamente sua própria cópia dessas visualizações quando o controlador de visualização as solicitar. No entanto, se você criar suas visualizações manualmente, cada controlador de visualização deverá ter seu próprio conjunto exclusivo de visualizações. Você não pode compartilhar exibições entre os controladores de exibição.
A visualização raiz de um controlador de visualização é sempre dimensionada para caber no espaço atribuído. Para outras visualizações na hierarquia de visualizações, use o Interface Builder para especificar as restrições de layout automático que determinam como cada vista é posicionada e dimensionada dentro dos limites da supervisualização. Você também pode criar restrições programaticamente e adicioná-las às suas exibições nos momentos apropriados. Para obter mais informações sobre como criar restrições, consulte o Guia de layout automático.
Tratamento de Notificações Relacionadas à Visualização.
Quando a visibilidade de suas visualizações muda, um controlador de visualização chama automaticamente seus próprios métodos para que as subclasses possam responder à mudança. Use um método como a visualização Aparecerá (_ :) para preparar suas exibições para aparecer na tela e usar a visualização Desaparecerá (_ :) para salvar as alterações ou outras informações de estado. Use outros métodos para fazer as alterações apropriadas.
A Figura 1 mostra os possíveis estados visíveis das exibições de um controlador de exibição e as transições de estado que podem ocorrer. Nem todos os métodos de retorno de chamada "em" serão combinados com apenas um método de retorno de chamada "did". Você precisa garantir que, se iniciar um processo em um método de retorno de chamada "vai", você finalizará o processo nos métodos de retorno de chamada "feito" correspondente e o oposto "vai".
Transições de estado válidas.
Manipulando Rotações de Visualização.
No iOS 8, todos os métodos relacionados à rotação são reprovados. Em vez disso, as rotações são tratadas como uma alteração no tamanho da visualização do controlador de exibição e, portanto, são relatadas usando a exibição Método de Transição (para: com :). Quando a orientação da interface muda, o UIKit chama esse método no controlador de visualização raiz da janela. Esse controlador de visualização notifica seus controladores de exibição filho, propagando a mensagem por toda a hierarquia do controlador de exibição.
No iOS 6 e no iOS 7, seu aplicativo suporta as orientações de interface definidas no arquivo Info. plist do seu aplicativo. Um controlador de visualização pode substituir o método de Orientações da Interface suportado para limitar a lista de orientações suportadas. Normalmente, o sistema chama esse método somente no controlador de visualização raiz da janela ou em um controlador de exibição apresentado para preencher a tela inteira; Os controladores de visualização filho usam a parte da janela fornecida por seu controlador de visualização pai e não participam mais diretamente das decisões sobre quais rotações são suportadas. A interseção da máscara de orientação do aplicativo e da máscara de orientação do controlador de visualização é usada para determinar em quais orientações um controlador de visão pode ser rotacionado.
Você pode substituir a orientação de interface preferencial para apresentação de um controlador de exibição que deve ser apresentado em tela inteira em uma orientação específica.
Quando ocorre uma rotação para um controlador de visualização visível, o Rotacionará (para: duração :), Animate Rotation (para: duration :) e os métodos Rotate (from :) serão chamados durante a rotação. A view O método Layout Subviews () também é chamado depois que a view é redimensionada e posicionada por seu pai. Se um controlador de visualização não estiver visível quando ocorrer uma alteração de orientação, os métodos de rotação nunca serão chamados. No entanto, a exibição será chamada quando a exibição se tornar visível. Sua implementação desse método pode chamar o método de orientação da barra de status para determinar a orientação do dispositivo.
No momento do lançamento, os aplicativos devem sempre configurar sua interface em uma orientação retrato. Depois que o aplicativo (_: o método Finish Launching With Options :) for retornado, o aplicativo usará o mecanismo de rotação do controlador de exibição descrito acima para rotacionar as vistas para a orientação apropriada antes de mostrar a janela.
Implementando um controlador de exibição de contêiner.
Uma subclasse personalizada do UIView Controller também pode atuar como um controlador de exibição de contêiner. Um controlador de exibição de contêiner gerencia a apresentação do conteúdo de outros controladores de visualização que possui, também conhecidos como controladores de exibição filho. A visão de uma criança pode ser apresentada como está ou em conjunto com as visualizações de propriedade do controlador de exibição de contêiner.
Sua subclasse de controlador de exibição de contêiner deve declarar uma interface pública para associar seus filhos. A natureza desses métodos depende de você e depende da semântica do contêiner que você está criando. Você precisa decidir quantos filhos podem ser exibidos pelo seu controlador de exibição de uma vez, quando esses filhos são exibidos e onde eles aparecem na hierarquia de visualizações do controlador de visualizações. Sua classe de controlador de exibição define quais relacionamentos, se houver, são compartilhados pelos filhos. Ao estabelecer uma interface pública limpa para seu contêiner, você garante que as crianças usem seus recursos logicamente, sem acessar muitos detalhes particulares sobre como seu contêiner implementa o comportamento.
Seu controlador de exibição de contêiner deve associar um controlador de exibição filho a ele mesmo antes de adicionar a visualização raiz do filho à hierarquia de exibição. Isso permite que o iOS direcione adequadamente os eventos para os controladores de exibição filho e as visualizações que esses controladores gerenciam. Da mesma forma, depois de remover a visualização raiz de um filho de sua hierarquia de exibição, ele deve desconectar esse controlador de exibição secundária de si mesmo. Para criar ou quebrar essas associações, seu contêiner chama métodos específicos definidos pela classe base. Esses métodos não devem ser chamados por clientes de sua classe de contêiner; eles devem ser usados apenas pela implementação do contêiner para fornecer o comportamento esperado de contenção.
Aqui estão os métodos essenciais que você pode precisar chamar:
Você não é obrigado a substituir quaisquer métodos ao criar um controlador de exibição de contêiner.
Por padrão, retornos de chamada de rotação e aparência são automaticamente encaminhados para filhos. Você pode, opcionalmente, substituir os Métodos de Rotação de Encaminhamento Automático () e deve encaminhar métodos de Aparência Automática para assumir o controle desse comportamento por conta própria.
Gerenciamento de Memória.
A memória é um recurso essencial no iOS e os controladores de visualização fornecem suporte integrado para reduzir o espaço ocupado pela memória em momentos críticos. A classe UIView Controller fornece algum tratamento automático de condições de pouca memória através do método Receive Memory Warning (), que libera memória desnecessária.
Preservação e Restauração do Estado.
Se você atribuir um valor à propriedade Identificador de restauração do controlador de visualização, o sistema poderá solicitar que o controlador de visualização codifique a si mesmo quando o aplicativo fizer a transição para o segundo plano. Quando preservado, um controlador de visualização preserva o estado de quaisquer visualizações em sua hierarquia de exibição que também possuam identificadores de restauração. Controladores de visualização não salvam automaticamente nenhum outro estado. Se você estiver implementando um controlador de exibição de contêiner personalizado, será necessário codificar qualquer controlador de exibição filho por conta própria. Cada criança que você codifica deve ter um identificador de restauração exclusivo.
Para obter mais informações sobre como o sistema determina quais controladores de visualização preservar e restaurar, consulte o Guia de programação de aplicativos para iOS.
Комментариев нет:
Отправить комментарий