Pergunta

Saudações! Eu tenho um trabalho aplicativo para iPhone (huzzah!) Que usa um MainView.xib contendo um totalmente abastecido UITabBar com vários UINavigationController objetos e pontos de vista em-the-pronto.

Eu já foram convidados para adicionar uma visão única de inscrição a esta mistura. Este ponto de vista parece antes UITabBar no app-lançamento, obter algumas informações do usuário, cadastre-se com um servidor - ou verificar se há um registro existente, em seguida, esquilo alguns dados afastado no chaveiro. (Se o chaveiro já mostra comprovante de inscrição, então vamos pular mostrando este ponto de vista particular.)

O registo e parte chaveiro Eu tenho sob controle ( obrigado Erica Sadun para o último! ), mas mostrando que visão em tempo uma inicial está provando ser mais complicado do que eu esperava.

Eu suspeito que eu estou muito perto do problema para ver o que está errado. Eu realmente espero que seja um erro do piloto e não exige nada muito Rube Goldberg!

Aqui está o cenário:

O aplicativo começa por carregamento MainView.xib , em que se encontra o referido UITabBar controlador, et. al. Por uma questão de argumento, vamos dizer que temos de mostrar que a visão de registro. Além disso, gostaríamos que ele tenha uma aparência modal, por isso vai voar em cima de fundo. Então, quando estamos a fazer, podemos rejeitá-lo, chamar um delegado (provavelmente o App Delegado) e dizer-lhe para continuar com o original UITabBar .

// Normally, the Tab Bar Controller's view is added to the window ... still do this?
[window addSubview:tabBarController.view];

// We could now set up a VC like so. Mostly harmless. (I know, "mvc" is an unfortunate abbreviation in this case.)
RegistrationVC *mvc = [[RegistrationVC alloc] initWithNibName:@"RegistrationView" bundle:nil];

Note que RegistrationView.xib tem um UIView dentro, mas nenhum controlador nav. Queremos mantê-lo dissociado para que ele possa ser reutilizado, por exemplo, como parte de controlador de navegação de um item da barra de guia (para rever as suas informações de registro, por exemplo).

Seguindo em frente. Criamos um controlador nav com a intenção de apresentar as coisas de forma modal:

UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:mvc];

Em seguida, apresentamos a nossa VC modal, usando o barra de abas controlador como base, e liberar os bits alloc'ed.

[tabBarController presentModalViewController:nc animated:YES];
[nc release];
[mvc release];

Primeira observação. Algo me diz que isso é simplesmente desleixado. Você pode ver barra de navegação primeiro item da barra da aba e veja aparecem apenas como a visão modais rusgas em. Yeccch! Além disso, tentando definir o VC selecionado para nil de antemão não tem efeito:

 tabBarController.selectedViewController = nil;

Nós realmente não quiser / precisar usar a barra de guia até após o VC modal é feito (e temos o delegado para ajuda-nos quando isso acontece).

Por que estou sequer se preocupar com o Bar Tab? Bem, parece que eu preciso algo para pendurar o chapéu do VC modal, e eu não sei o que mais há para uso.

Esta é a única maneira? Parece apenas para amarrar o VC Registro eo Bar Tab desnecessariamente, e isso só cheira ... errado.

Clues boas-vindas / apreciada!

Foi útil?

Solução

É difícil responder a isso sem saber o que seus programas Default.png. Assumindo que você está seguindo o HIG e ele exibe uma tabBarController vazio, eu sugiro uma estratificação um pouco complicado: vista de fundo: tabBarController.view vista média: UIImageView: Default.png vista superior: Vista registro posicionado abaixo da parte inferior da tela

Na inicialização, se você precisa mostrar a vista de registo, animar manualmente-a para cima, e uma vez que a animação é feita remover o UIImageView abaixo dela. Quando o registro for concluído, animar manualmente o ponto de vista de inscrição para baixo para revelar o tabBarController. Se no arranque você não precisa o ponto de vista de registo, apenas animar o UIImageView a desaparecer (ou simplesmente removê-lo).

OTOH lado, se você não está seguindo o HIG e, em vez mostrando algum tipo de tela de abertura, as coisas ficam um pouco mais fácil. Camada assim: vista de fundo: tabBarController.view vista superior: UIImageView: Default.png

Se você precisa mostrar o registo, fazer presentModalViewController com animação: NÃO e depois fade out do UIImageView. Se não, apenas fade out do UIImageView.

Essa é uma longa explicação w / o fotos, espero que isso faz sentido. O ponto importante é que eu estou sugerindo que a adição de um UIImageView: Default.png ser a primeira coisa que se vê quando o aplicativo é iniciado, e usar isso para orientar a sua transição para o registo ou tabBarController conforme apropriado

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top