pushViewController com tableViewController em viewController
Pergunta
Eu tenho um UIViewController, este controlador está contido em um navigationController. Eu adicionar um UITableViewController neste viewController. Gostaria de chamar um método pushViewController quando pressiono em uma célula do meu tableView.
Eu tentei isso:
UITableViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
FirstView *myViewController = [[FirstView alloc] init];
[f myViewController];
}
UIViewController (FirstView)
-(void)pushIt
{
SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:sCont animated:YES];
NSLog(@"didSelect"); // is printed
[sCont release];
sCont = nil;
}
Mas nada acontecer. Coloquei NSLog () para o meu método pushIt e eu posso vê-lo. Então eu não entendo por que eu não posso empurrá-lo.
Qualquer idéia?
Solução
UIViewController
tem uma propriedade chamada navigationController
que irá retornar um UINavigationController
se existir alguma para o ponto de vista do controlador a sua chamada de.
Usando essa propriedade, você pode empurrar controladores de vista para a pilha de navegação do método didSelectRowAtIndexPath:
da sua exibição de tabela.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:sCont animated:YES];
[sCont release];
}
A razão o seu código atual não está funcionando é provavelmente devido ao seguinte:
- Você já tem uma instância de FirstViewController, como você disse ter adicionado uma exibição de tabela como seu subexibição
- Você tentar criar uma nova instância de um FirstViewController quando o usuário toca um celular, que não está na pilha de navegação, de modo a tentar empurrar um controlador de vista para a pilha de lá não funciona, porque a propriedade
navigationController
retorna nil.
Outras dicas
Você alloc e o init myViewController mas nunca empurrá-lo para a navegação ou a janela ou qualquer outra coisa, então você empurrar sCont para myViewController, que não está presente na janela. Primeiro, tente não usar myViewController, próxima tentativa para empurrar myViewController para navegação antes de empurrar sCont para ele.