Usando 'presentModalViewController' para carregar uma visão
-
06-07-2019 - |
Pergunta
Eu estou tentando carregar um temporária, slide-in, vista de outro controlador de vista. controladores de vista do meu aplicativo são estruturados:
Application > Tab Bar Controller > TabBarItem > View Controller
Neste controlador de vista, eu tenho um botão que dispara com sucesso um método para carregar a exibição temporária:
- (IBAction)displayTimePickerViewForDayButton:(id)sender {
NSLog(@"displayTimePickerViewForDayButton method entered.");
// create the selector view controller and become the delegate
WOTimePickerViewController *tpvc = [[WOTimePickerViewController alloc] initWithNibName:@"WOTimePickerView" bundle:nil];
tpvc.delegate = self;
tpvc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:tpvc animated:YES];
[tpvc release];
}
Tenho verificado que a minha WOTimePickerViewController está retornando com sucesso do método init mas a vista nunca entra seu método viewDidLoad.
Então, se eu olhar a vista em IB, ele parece estar ligado à propriedade "visão" do vc. Quando eu executo a exibição no simulador (a partir de IB) torna corretamente.
Quando eu executar o aplicativo de Xcode, eu posso navegar para a vista, clique meu botão, e um em branco aparece tela branca (note que este não é o fundo branco da opinião de que deve ser carregado).
Solução
Você deve fazê-lo como este ..
WOTimePickerViewController *tpvc = [[WOTimePickerViewController alloc] initWithNibName:@"WOTimePickerView" bundle:nil];
tpvc.delegate = self;
UINavigationController *navCntrlr = [[UINavigationController alloc] initWithRootViewController:tpvc];
navCntrlr.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self.navigationController presentModalViewController:tpvc animated:YES];
[tpvc release];
Mas o importante que está faltando é que você não está fazendo certo.
Você deve fazê-lo como:
[self.navigationController presentModalViewController:tpvc animated:YES];
e quando quiser descartar o controlador modalView você deve fazê-lo como:
[self.navigationController dismissModalViewControllerAnimated:YES];
Outras dicas
Eu acho que o modalTransitionStyle do controlador de vista se aplica a vista modais mostrados de que controlador de vista. Então, se você quiser usar a transição UIModalTransitionStyleCoverVertical para exibir seu controlador modal, você deve definir a propriedade modalTransitionStyle no controlador de exibição pai (self), não o novo.
Eu não tenho nenhuma experiência usando o modalTransitionStyle, mas talvez definindo essa propriedade antes da visão é carregado está causando alguns problemas? Eu tentaria comentando-o para fora ...
Parece que tudo está configurado corretamente no IB. Enquanto do seu arquivo proprietário é o controlador de vista, e de tomada de vista está vinculada à vista que deve ser bom.
Espero que ajude,