Pregunta

Tengo un UIViewController, este controlador está contenido en un NavigationController.Agrego un UITableViewController en este viewController.Me gustaría llamar a un método pushViewController cuando presiono una celda de mi tableView.

Probé esto:

Controlador UITableView


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{   
  FirstView *myViewController = [[FirstView alloc] init];
  [f myViewController];
}

Controlador UIView (Primera vista)


-(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;
}

Pero no pasa nada.Puse NSLog() en mi método pushIt y puedo verlo.Entonces no entiendo por qué no puedo presionarlo.

¿Alguna idea?

¿Fue útil?

Solución

UIViewController tiene una propiedad llamada navigationController que devolverá un UINavigationController si existe uno para el controlador de vista desde donde se llama.

Usando esta propiedad, puede insertar controladores de vista en la pila de navegación desde la vista de tabla didSelectRowAtIndexPath: método.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    SecondView *sCont = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:sCont animated:YES];
    [sCont release];
}

La razón por la que su código actual no funciona probablemente se deba a lo siguiente:

  • Ya tienes una instancia de FirstViewController, como dijiste, agregaste una vista de tabla como su subvista
  • Intenta crear una nueva instancia de FirstViewController cuando el usuario toca una celda, que no está en la pila de navegación, por lo que intentar insertar un controlador de vista en la pila desde allí no funciona, porque el navigationController la propiedad devuelve cero.

Otros consejos

alloc y myViewController init pero nunca empujarlo a la navegación o ventana o cualquier otra cosa, entonces empujan a SCONT myViewController, que no está presente en la ventana. En primer lugar, trate de no usar myViewController, al lado tratar de empujar myViewController a la navegación antes de empujar SCONT en ella.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top