2012-05-20 21 views
11

Tengo una aplicación basada en UINavigationController. Puedo establecer mediante programación el título de la UINavigationBar desde dentro método viewDidLoad mi punto de vista del controlador:UINavigationBar título editable?

self.navigationItem.title = m_name; 

¿Puedo hacerlo de modo que el título en la barra de navegación se puede editar? ES DECIR. Quiero que el usuario pueda tocar el título en la barra de navegación y poder editarlo.

¿Esto es posible? Y si es posible, ¿es probable que cumpla con las Pautas de interfaz humana de Apple? (Este mensaje indica lo hará, pero no me dice cómo implementarlo - Make UINavigationBar title editable)

Muchas gracias

Nathan

Respuesta

20

que son capaces de establecer una vista personalizada para su título.

vista titleview

Una costumbre que se muestra en el centro de la barra de navegación cuando el receptor es el elemento superior.

@property UIView (, retener no atómica) * titleview

Discusión

Si este valor de la propiedad es nulo, el título del elemento de navegación se que aparece en el centro de la barra de navegación cuando el receptor está el artículo superior . Si establece esta propiedad en un título personalizado, se muestra en lugar del título. Esta propiedad se ignora si leftBarButtonItem es no nil.

Las vistas personalizadas pueden contener botones. Use el método buttonWithType: UIButton class para agregar botones a su vista personalizada en el estilo de la barra de navegación . Las vistas de título personalizadas se centran en la barra de navegación y se pueden cambiar de tamaño para que quepan.

Si coloca un UITextField en su titleView, podría darle un fondo claroColor y configurarlo para que no tenga borde. Wala tienes un Título UINavigationBar que puedes tocar y editar.

+0

Gracias por su respuesta Ryan. +1 para la respuesta, y también la comedia de 'voila' :). Cheers –

+0

Me alegro de poder ayudar y cometer crímenes gramaticales al mismo tiempo. :) Feliz Codificación. –

+0

¿Alguien sabe cómo hacer esto con un ancho flexible? Si giro mi dispositivo, quiero que el campo de texto cambie su ancho de la misma manera que la etiqueta del título. –

0

Se puede poner un campo de texto justo encima de la barra de navegación, y configurarlo oculto/no habilitado., use un reconocedor de gestos para detectar un toque en la barra de navegación y configure el campo de texto como habilitado/no oculto. Luego, en el campo de texto finalizó el método de edición, configúrelo como oculto nuevamente y establezca el título de la barra de navegación como el del campo de texto.

0

Agregue un campo de texto oculto sobre la barra de navegación, por lo que al tocar, se abrirá un teclado y el usuario puede ingresar texto en eso.

Obtenga el evento del botón de retorno, allí puede cambiar el texto de la barra de navegación con el texto recién agregado. Y esconde el campo de texto nuevamente.

Disfrute de codificación :)

0

Ponga un campo de texto en la barra de navegación y establezca el color de fondo del campo de texto con la opacidad en cero.

11

La solución de Ryan es exactamente correcta. En caso de que alguien tenga problemas para implementarlo, aquí hay un código de muestra que debería ayudarlo. Simplemente pégalo en ViewDidLoad en cualquier clase con un navigationController.

UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(0, 0, 200, 22)]; 
textField.text = @"Insert Title Here"; 
textField.font = [UIFont boldSystemFontOfSize:19]; 
textField.textColor = [UIColor whiteColor]; 
textField.textAlignment = NSTextAlignmentCenter; 
self.navigationItem.titleView = textField; 

Y si su proyecto no utiliza ARC, asegúrese de liberar el campo de texto, así:

UITextField *textField = [[[UITextField alloc]initWithFrame:CGRectMake(0, 0, 200, 22)]autorelease]; 

o así:

[textField release]; 

Espero que ayude.

+0

¿Cómo lo dimensionaría dinámicamente? – Zorayr

2

solución de Ryan como veloz

let textField = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 22)) 
textField.text = "Title" 
textField.font = UIFont.systemFontOfSize(19) 
textField.textColor = UIColor.whiteColor() 
textField.textAlignment = .Center 
self.navigationItem.titleView = textField