Hola a todos, soy nuevo en el desarrollo de iPhone y yo no soy la comprensión de la totalidad de la UINavigationController y UITabBarController idea. Es un sustituto para el otro – ¿cómo apps como Tweetie combinar ambos?

Me gustaría tener mi aplicación persistente de la Barra de pestañas @ la parte inferior (la que parece estar funcionando), pero también una barra de Navegación en la parte superior que puede push/pop vistas a la pantalla sin quitar la barra de pestañas.

  • ¿Cómo puedo lograr esto?
  • Lo que debe la jerarquía en IB tan lejos como mi MainWindow.xib con respecto a todos estos controladores?
  • ¿Cuál es la mejor práctica aquí?

Muchas gracias,

Directamente desde el Tweetie codificador boca: stackoverflow.com/questions/576764/…

OriginalEl autor barfoon | 2010-02-26

2 Comentarios

  1. 15

    Simplemente envuelva el controlador de vista dentro de la UINavigationController y Lugar de la UINavigationController dentro de la UITabBar.
    Esto va a funcionar bien para usted…

    Ejemplo:

    NSMutableArray *tabBarViewControllers = [[NSMutableArray alloc] initWithCapacity:2];
    
    tabBarController = [[UITabBarController alloc] init];
    [tabBarController setDelegate:self];
    
    UINavigationController *navigationController = nil;
    navigationController = [[UINavigationController alloc] initWithRootViewController:<Your View controller1>];
    [tabBarViewControllers addObject:navigationController];
    [navigationController release];
    navigationController = nil;
    
    navigationController = [[UINavigationController alloc] initWithRootViewController:<Your View controller2>];
    [tabBarViewControllers addObject:navigationController];
    [navigationController release];
    navigationController = nil;
    
    tabBarController = tabBarViewControllers;
    [tabBarViewControllers release];
    tabBarViewControllers = nil;
    Esto hace mucho más sentido, cada controlador de vista puede tener su propio controlador de Navegación para pop/push vistas. Gracias!
    de esta manera, no quiero tener éxito en la nomenclatura de la navbar y la barra de pestañas elemento con dos nombres diferentes. Es allí una manera de hacer eso?

    OriginalEl autor Manjunath

  2. 3

    Utilizar el asistente para una Barra de pestañas de la Aplicación, y se configura como normal. En cualquier ficha en la que desea agregar un controlador de navegación, crear en el XIB el uso de la biblioteca. Mi XIB:

    - Propietario del archivo DescriptiveNameNavViewController 
    - Socorrista 
    - Vista UIVIew 
    - Navegación Controlador De UINavigationController 
    - Barra De Navegación UINavigationBar 
    

    Tenga en cuenta que no hay nada en la vista. Ver viewDidLoad por debajo de donde la UINavigationController se une a la UIView.

    En el archivo de encabezado de la Ficha del ViewController (que he llamado aquí DescriptiveNameNavViewController — no hay una norma particular para esto, pero yo uso [Algo]NavViewController para recordarme que este ViewController contiene un controlador de navegación con la navegación de la pila. Este es el nombre del controlador que me puse en la ventana principal.xib que genera el asistente) Establecer un UINavigationController * IBOutlet que tiene el controlador de navegación en la XIB:

    @interface DescriptiveNameNavViewController : UIViewController {
        UINavigationController *navigationController;
    }
    @property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
    
    @end

    En el controlador para el DescriptiveNameNavViewController , hacer algo como esto:

    - (void)viewDidLoad {
        [super viewDidLoad];
        [[self view] addSubview:[navigationController view]];
        DescriptiveNameController *aController = [[[DescriptiveNameController alloc ] initWithNibName:@"DescriptiveNameController" bundle:nil ] autorelease];
        aController.title = @"Descriptive Title";
    
    //
    // app stuff goes here.
    //
    
        [self.navigationController pushViewController:aController animated:YES];
        [self.navigationController setDelegate:self];
    }

    Ajuste el delegado en la DescriptiveNameNavViewController es súper importante, porque de lo contrario no obtendrás los métodos llamados que espera en DescriptiveNameViewController instancias y cualquier otra cosa que usted empuje en la navegación del controlador de la pila.

    En DescriptiveNameNavViewController, implementar el UINavigationControllerDelegate métodos como este:

    - (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
    {
        if ([viewController respondsToSelector:@selector(viewDidAppear:)]) {
            [viewController viewDidAppear:animated];
        }
    }

    Y que hará que los mensajes para obtener propaga a los controladores dentro de la UINavigationController como se espera. Parece que muchos de los problemas que se encuentra la gente son, porque la viewDidAppear: o otros métodos no están recibiendo la llamada en el ViewControllers empujó en el NavigationController.

    De todos modos, quiero saber si más detalle, sería de ayuda.

    He seguido este y no funciona. Todavía no está recibiendo este en un nivel conceptual. Cuando yo inicie la aplicación y haga clic en la segunda pestaña, simplemente se carga la vista, y no uno con un controlador de navegación. También, se está perdiendo la UINavigationControllerDelegate protocolo en la cabecera. Por qué no navigationController define como un IBOutlet en la interfaz, pero ES en la propiedad de la declaración?
    Sólo hay un IBOutlet en el @propiedad de la instrucción, ya que es donde se pone recogido por el interface builder. Es un vacío de la macro. Si usted está recibiendo una vista vacía en el segundo panel, es porque cargar el Controlador de Navegación en viewDidLoad no está funcionando. En cualquier caso, si chrissr la solución está trabajando para usted, acaba de ver para el viewWill* y viewDid* métodos no llegar propaga a su subvistas y si es así implementar el delegado. (La falta delegado de protocolo era un mispaste, pero los métodos llamados de todos modos.)

    OriginalEl autor corprew

Dejar respuesta

Please enter your comment!
Please enter your name here