Pregunta

Tengo un problema con una tabla y se muestra otra vista cuando el usuario toca una celda de la tabla. Estoy usando un UITabBarController para que la vista principal muestre diferentes vistas. Luego uso un UINavigationController cuando el usuario selecciona una vista UITableView para mostrar la siguiente vista de la selección de celdas de la tabla.

Mi problema es este: cuando seleccionan la celda de la tabla, la celda se resalta y la siguiente vista no aparece. Estoy usando IB. Todos los ejemplos que he encontrado están haciendo esto de la misma manera que yo, ¡excepto que los ejemplos funcionan!

Tengo los controladores cargados en un NSMutableArray con un Diccionario. También probé este código creando directamente un controlador de vista en lugar de usar el elemento de matriz. Los mismos resultados ...

Verifiqué el controlador de destino (Calc1ViewController) para asegurarme de que no había nada malo con el controlador. Al mostrarlo directamente, el controlador (Calc1ViewController) se muestra correctamente.

Aquí hay un código .....

La inicialización del controlador de vista en el diccionario:

Calc1ViewController *calc1ViewController = [[Calc1ViewController alloc] init];
[menuList addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                     NSLocalizedString(@"SSC - page 1",@""), @"title",
                     calc1ViewController, @"viewController",
                     nil]];
[calc1ViewController release];

También probé esto sin usar el diccionario, creando un controlador de vista en lugar del [[menuList objectAtIndex: ...]; línea: al crear el controlador de vista de esta manera:

Calc1ViewController *targetViewController = [[Calc1ViewController alloc] init];


// the table's selection has changed, switch to that item's UIViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *targetViewController = [[menuList objectAtIndex: indexPath.row] objectForKey:@"viewController"];
    [[self navigationController] pushViewController:targetViewController animated:YES];
    targetViewController = nil;
}

El controlador de navegación se define en AppDelegate y se conecta al RootViewController a través de IB.

Cuando selecciono una fila de la tabla, muestra en el depurador que el código pushViewController se ejecuta, pero la siguiente vista no se muestra. Aquí hay un ejemplo:

texto alternativo http://thecoolestcompany.com/ssc-table-view.jpg

¿Alguna idea?

¿Fue útil?

Solución

Finalmente lo descubrí ......

Tenía el UINavigationController y el UITabBarController en el mismo nivel. Después de mover el Controlador de navegación de niño al controlador de la barra de pestañas, todo funcionó. Puede agregar tantos controladores de navegación a una barra de pestañas como desee. En IB es un poco confuso. Debe arrastrar el NavigationController a TabBar como un nuevo elemento de la barra de pestañas.

Otros consejos

No hay mucho para seguir con el código que ha proporcionado. Lo único en lo que puedo pensar sin mirar más código es que tal vez no haya inicializado su controlador de vista (el que está en su diccionario) correctamente, o en absoluto, o el diccionario al que está accediendo no es el correcto ...

¿Cuál es el valor de [self navigationController] cuando se llama a pushViewController? ¿Es nulo?

¿Cuál es el valor de targetViewController cuando se pasa a pushViewController? ¿Es nulo?

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