framework español ios objective-c cocoa-touch

ios - español - Atributo Título de UIViewController en Storyboard



cocoa touch español (10)

a) Si no estoy usando Storyboard pero solo xibs regulares, al establecer el título de un controlador de vista se establece implícitamente el título de los elementos de navegación, así como el título del elemento de la barra de pestañas. Pero no es el mismo guión gráfico. ¿Es este el comportamiento previsto?

Creo que este es el comportamiento previsto. Creo que el propósito del atributo de title de un controlador de vista es más una propiedad que puede usarse a discreción del desarrollador, quizás para distinguir entre controladores.

Otra razón para este cambio, creo, es que el título de su elemento de navegación puede ser diferente del título de la barra de pestañas, ya que el título de la barra de pestañas no puede ser tan largo como el título de navegación.

b) ¿Cuál es entonces el propósito del título del controlador de visualización (en Storyboard)? parece no tener ningún efecto.

Creo que mencioné esto en mi primer párrafo. Creo que el atributo de title de un controlador es una propiedad que el desarrollador puede usar para distinguir entre controladores.

Estoy configurando el campo de título de un UIViewController través de Interface Builder / Storyboard :

Este controlador de vista está anidado en un UINavigationController que a su vez está anidado dentro de un UITabBarController . Cuando ejecuto la aplicación, mi elemento de navegación no tiene título, como tampoco lo hace el elemento de la barra de pestañas.

Si configuro explícitamente el título del elemento de navegación del controlador de vista, y también su título de elemento de barra de pestañas en el constructor de interfaz, entonces funciona bien.

Me pregunto:

a) Si no estoy usando Storyboard pero solo xibs regulares, al establecer el título de un controlador de vista se establece implícitamente el título de los elementos de navegación, así como el título del elemento de la barra de pestañas. Pero no es el mismo guión gráfico . ¿Es este el comportamiento previsto?

b) ¿Cuál es entonces el propósito del título del controlador de visualización (en Storyboard )? parece no tener ningún efecto.

¡Gracias!


Creo que funciona como está diseñado, aunque esperamos otro comportamiento. Si imprime la propiedad del título en - (void) viewDidLoad será el mismo valor que establece en el guión gráfico , por lo que no veo ninguna razón para que esto no funcione a menos que la elección de Apple.


En mi caso, resuelvo con esto:

[self.tabBarController.navigationItem setTitle:@"My Title"];


Me encontré con el mismo problema. No entiendo por qué no está funcionando ... Puede ser a propósito o simplemente ser un error.

Para cambiar el título en el constructor de interfaz, puede hacer clic en el elemento de navegación directamente y cambiar el título allí:


Me encontré con este problema esta mañana. Aquí están las puñaladas que tomé y la solución final.

Esto registra correctamente el título del controlador de vista secundaria como se establece en el guión gráfico, pero no tiene ningún efecto sobre lo que se está presentando:

- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"Title: %@", self.title); }

Esto no tiene efecto; el título aún no se muestra (probablemente haciendo un "if (! [_ title isEqualToString: title]) {}" user the hood:

- (void)viewDidLoad { [super viewDidLoad]; self.title = [self.title copy]; }

Esto hace que el título se establezca correctamente:

- (void)viewDidLoad { [super viewDidLoad]; NSString *title = self.title; self.title = nil; self.title = title; }

Supongo que el UINavigationController está sacando el título de la vista que se presenta antes de que se haya cargado desde el guión gráfico, pero luego no comienza a escuchar los cambios hasta que se haya establecido la propiedad. Sin embargo, no uso guiones gráficos o plumillas muy a menudo, por lo que es muy posible que haya una casilla de verificación mágica para este lugar oculto en el que me he perdido.

En cualquier caso, parece que puede hacer el auto.navigationItem.title = self.title dance, o lo anterior, como una solución alternativa y aún mantener sus títulos en IB.

Los documentos de manzanas para esto son un poco claros:

El controlador de navegación actualiza el centro de la barra de navegación de la siguiente manera:

  • Si el nuevo controlador de vista de nivel superior tiene una vista de título personalizada, la barra de navegación muestra esa vista en lugar de la vista de título predeterminada. Para especificar una vista de título personalizada, establezca la propiedad titleView del elemento de navegación del controlador de vista.

  • Si no se establece una vista de título personalizada, la barra de navegación muestra una etiqueta que contiene el título predeterminado del controlador de vista. La cadena para esta etiqueta generalmente se obtiene de la propiedad del título del controlador de vista. Si desea mostrar un título diferente al asociado con el controlador de vista, establezca en su lugar la propiedad de título del elemento de navegación del controlador de vista.

Énfasis mío


Probé todos los métodos anteriores, incluso intenté agregar manualmente una barra de navegación pero fue en vano.

Así que esto es lo que funcionó para mí.

Elimine cualquier elemento de barra de navegación que agregue manualmente al controlador de vista y añádalo a su método viewDidLoad

self.navigationController.navigationBar.topItem.title = @"My Title";

o

self.navigationController.topViewController.title = @"My Title";


Puede establecer el título de UINavigationBar en Storyboard haciendo doble clic en la UINavigationBar navegación real y escribiendo un título allí mismo. Esto solo establece el título para UINavigationBar .

Establecer el título en el código ofrece algunas posibilidades diferentes.

self.title = @"Your title"; configurará el título de una barra de navegación y también hará que el título caiga en cascada en un UITabBarItem, si está presente.

self.navigationItem.title = @"Your title"; solo establecerá el título de la barra de navegación, asumiendo que está presente un UINavigationController, y NO afectará a UITabBarItem.

self.navigationController.title = @"Your title"; establecerá el título de un UITabBarItem pero NO el UINavigationBar.


Si tiene presente UINavigationItem , debe usar el título del elemento de navegación en el guión gráfico. Si no tiene un elemento de navegación para un controlador de vista, el UINavigationController usará la propiedad de title del controlador de vista.

Ejemplo:

En su guión gráfico, si tiene un elemento de navegación, el controlador de navegación no necesita leer el título del controlador de vista. Incluso si el campo de título está vacío para este elemento de navegación.

Elimina el elemento de navegación (si puedes, no podrás hacerlo para el controlador de la vista raíz, pero lo harás para los demás) y tu título se cargará correctamente.


Todo lo demás en esta página falló. Por ahora, esto funcionó, en código, en viewDidLoad:

NSString* text = @"My page title"; UIFont* font = [UIFont systemFontOfSize:20.0]; const CGSize SIZE = [text sizeWithAttributes:@{NSFontAttributeName:font}]; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, SIZE.width, SIZE.height)]; label.text = text; label.textColor = UIColor.blackColor; self.navigationItem.titleView = label;


Paso 1

Si está buscando un Xib en el Creador de Interfaces de Xcode, eche un vistazo en el panel "Esquema del documento" (segundo panel desde la izquierda). Expanda el controlador de vista con el que está trabajando hasta que encuentre un icono con la etiqueta: Artículo de navegación.

Paso 2

Si luego resalta el elemento de navegación y abre el panel de Utilidades (el más alejado a la derecha) y hace clic en el Inspector de atributos, verá dónde puede establecer el título del controlador de vista. Esta es la manera de hacerlo en Interface Builder, en lugar de hacerlo a través del código.