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?

Foi útil?

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.

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