Varias etiquetas en la barra de navegación

votos
3

Me gustaría crear una vista similar a la página Reproducción en curso en el iPhone y tener 3 líneas de texto en la barra de navegación.

La única forma que pude encontrar para hacer esto fue:

UINavigationBar *bar = [self.navigationController navigationBar];   
label = [[UILabel alloc] initWithFrame:CGRectMake(60, 2, 200, 14)];
label.tag = SONG_TAG;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:14];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor whiteColor];
label.highlightedTextColor = [UIColor blackColor];
[bar addSubview:label];
[label release];

//Create album label
label = [[UILabel alloc] initWithFrame:CGRectMake(60, 17, 200, 12)];
label.tag = ALBUM_TAG;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont systemFontOfSize:12];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.highlightedTextColor = [UIColor blackColor];
label.textColor = HEXCOLOR(0xA5A5A5ff);
[bar addSubview:label];
[label release];

//Create artist label
label = [[UILabel alloc] initWithFrame:CGRectMake(60, 30, 200, 12)];
label.tag = ARTIST_TAG;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont systemFontOfSize:12];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.highlightedTextColor = [UIColor blackColor];
label.textColor = HEXCOLOR(0xA5A5A5ff);
[bar addSubview:label];
[label release];

El problema con esto es que tengo que eliminarlos cuando la vista cambie. Entonces, en -viewWillDisappear tengo:

UILabel *label;
label = (UILabel *)[self.navigationController.navigationBar viewWithTag:SONG_TAG];
[label removeFromSuperview];
label = (UILabel *)[self.navigationController.navigationBar viewWithTag:ALBUM_TAG];
[label removeFromSuperview];
label = (UILabel *)[self.navigationController.navigationBar viewWithTag:ARTIST_TAG];
[label removeFromSuperview];

Creo que la manera de hacerlo es crear una vista personalizada que tenga las 3 etiquetas y agregarla a la vista de título. (Aquí está el truco: solo puede agregar 1 etiqueta o vista al punto de vista del título en la barra de navegación)

self.navigationItem.titleView = newViewIMadeWithThreeLabels
Publicado el 09/12/2008 a las 22:57
fuente por usuario
En otros idiomas...                            


7 respuestas

votos
4

UIView código siguiente funciona bien para mí, que tenía la misma etiqueta de la etiqueta utilizada dos veces, podría haber sido la razón del accidente.

UIView *btn = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 60)];

UILabel *label;
label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 200, 16)];
label.tag = 1;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:16];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.text = @"first line";
label.highlightedTextColor = [UIColor blackColor];
[btn addSubview:label];
[label release];

label = [[UILabel alloc] initWithFrame:CGRectMake(0, 30, 200, 16)];
label.tag = 2;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:16];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.text = @"second line";
label.highlightedTextColor = [UIColor blackColor];
[btn addSubview:label];
[label release];

self.navigationItem.titleView = btn;
Respondida el 20/12/2009 a las 22:37
fuente por usuario

votos
2

Podría intentar crear un UIViewController con sus etiquetas colocadas correctamente, y luego crear una instancia, como UIViewControllerSubclass * sub = [[UIViewControllerSubclass alloc] init];

Dentro de la subclase UIViewController, debe crear su vista en el método delegado loadView y adjuntar la vista de cada etiqueta a la vista del controlador de vista como [[self view] addSubview: label];

A continuación, adjunte su vista de esta manera:

self.navigationItem.titleView = sub.view;

Aquello podría funcionar.

Respondida el 09/12/2008 a las 23:10
fuente por usuario

votos
1

Hoy en día yo estaba pasando por el mismo problema y lo hice de esta manera.

  1. He creado un UIView de tamaño 320 * 44 en la posición 0,0 - puede tener un tamaño de vista diferente en función de sus necesidades.

  2. Crear una IBOutlet para esa vista personalizada denominada navigationBarTitleView - hacer las conexiones necesarias con vistas a su

  3. Añadir a subvista navgiationBar con el siguiente código en el interior en el interior viewWillAppear: O viewDidAppear:

    [[[Auto navigationController] navigationbar] addSubview: navigationBarTitleView];

  4. Cuando se presiona este punto de vista en el navigationcontroller, retire la navigationBarTitleView del supervista.

    [NavigationBarTitleView removeFromSuperview];

Respondida el 23/10/2010 a las 22:29
fuente por usuario

votos
1
UINavigationBar *bar = [self.navigationController navigationBar];
CGFloat navBarHeight = 70.0f;    
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);
[bar setFrame:frame];
UILabel *label;
label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 320, 10)];
label.tag = 1;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:12];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.text = @"Set the details for this event.";
label.highlightedTextColor = [UIColor blackColor];
[bar addSubview:label];
[label release];
[bar release];
Respondida el 14/05/2010 a las 13:13
fuente por usuario

votos
1

Tu sugerencia posterior en la publicación es correcta. Crea un UIView que contenga tus 3 etiquetas y configúralo como titleView. NO intente agregar subvistas directamente a UINavigationBar.

Respondida el 10/12/2008 a las 15:34
fuente por usuario

votos
0

Una forma más ordenado es sólo para enumsu etiqueta:

enum {
  SONG_TAG,
  ALBUM_TAG,
  ARTIST_TAG
};

El código debe trabajar entonces.

Respondida el 25/09/2010 a las 19:07
fuente por usuario

votos
0

Traté de agregar una vista completa ... sin embargo, la aplicación se bloqueaba cada vez que añadía una subvista (como una etiqueta) en el delegado de loadView. No soy muy bueno en la depuración de fallas completas, así que me pareció que usar un botón era mucho más simple. Aún no he encontrado ningún efecto secundario ...

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(0, 0, 320, 60);

UILabel *label;
label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 200, 16)];
label.tag = SONG_TAG;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:16];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.text = @"first line";
label.highlightedTextColor = [UIColor blackColor];
[btn addSubview:label];
[label release];

label = [[UILabel alloc] initWithFrame:CGRectMake(0, 30, 200, 16)];
label.tag = SONG_TAG;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:16];
label.adjustsFontSizeToFitWidth = NO;
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor blackColor];
label.text = @"second line";
label.highlightedTextColor = [UIColor blackColor];
[btn addSubview:label];
[label release];

self.navigationItem.titleView = btn;
Respondida el 15/12/2008 a las 23:46
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more