uinavigationcontroller uibutton uibarbuttonitem uitoolbar toolbaritems

uinavigationcontroller - uinavigation Barra de herramientas del controlador con elementos personalizados



uibutton uibarbuttonitem (4)

Apuesto a que el objeto no se muestra porque su vista no tiene nada. ¿Estás seguro de que hay una imagen llamada Reply_Message.png en tu proyecto? [UIImage imageNamed:@"Reply_Message.png"] podría ser nil .

Estoy tratando de usar la barra de herramientas de NavigationController en mi aplicación. Se supone que los elementos de la barra de herramientas de esta barra de herramientas cambian según la vista que se muestre el controlador. esto es muy básico.

Lo que intento hacer es agregar botones personalizados a la barra de herramientas utilizando el método "initWithCustomView:" de UIBarButtonItem. Sin embargo, el botón no aparecerá en la barra de herramientas. Pero si creo el UIBarButtonItem usando el método "initWithTitle:" o "initWithBarButtonSystemItem:", aparece el botón. Por ejemplo, mira el siguiente código:

UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemBookmarks target:self action:nil]; UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithTitle:@"edit" style:UIBarButtonItemStylePlain target:self action:nil]; NSArray *array = [[NSArray alloc] initWithObjects:item1, item2, nil]; [self setToolbarItems:array];

Si esto se hace, los botones aparecen en la barra de herramientas. Pero, si tuviera que hacer lo siguiente:

UIButton* replyBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [replyBtn setImage:[UIImage imageNamed:@"Reply_Message.png"] forState:UIControlStateNormal]; [replyBtn addTarget:self action:@selector(replyButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; replyBtn.frame = CGRectMake(10, 0, 40, 40); UIBarButtonItem *replyButton = [[UIBarButtonItem alloc] initWithCustomView:replyBtn]; UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemBookmarks target:self action:nil]; UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithTitle:@"edit" style:UIBarButtonItemStylePlain target:self action:nil]; NSArray *array = [[NSArray alloc] initWithObjects:item1, replyButton, item2, nil]; [self setToolbarItems:array];

En este código, solo el elemento1 y el elemento2 se muestran en la barra de herramientas. replyButton no se muestra en la barra de herramientas. Hay espacio en blanco en el lugar donde se supone que debe estar el botón.

Si este mismo código se usa en una barra de herramientas normal que creo en lugar de la barra de herramientas de NavigationController, aparece el botón. Intento usar solo una barra de herramientas en toda la aplicación para tener la misma sensación que la aplicación de correo de Apple. La razón por la que necesito usar el método "initWithCustomView:" es porque uno de los íconos es de color y esta es la única forma en que aparece coloreado en una barra de herramientas normal. Ahora, he revisado la documentación de Apple y no hay ninguna mención de por qué no se pudo llamar al método "initWithCustomView:" (o tal vez no pude encontrarlo).

Podría agradar a alguien brillar algo de luz sobre este tema para ayudarme a apuntar en la dirección correcta. gracias de antemano chicos.


Puede usar una barra de herramientas en su aplicación sin usar la barra de herramientas de controles de navegación. Como su código funciona con una barra de herramientas que no sea navigationController, esta podría ser la forma más fácil de lograr lo que desea. En el delegado de su aplicación, intente agregar una barra de herramientas a la ventana, como esta. De esta manera es persistente en toda la aplicación. Asegúrese de considerar un esquema que le permita acceder a la barra de herramientas para agregar / eliminar botones, u ocultarlo / mostrarlo desde diferentes controladores de vista.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { /////// frame sizes //////// // compensate for the status bar int statusBarHeight = 20; // toolbar int toolbarWidth = window.frame.size.width; int toolbarHeight = 30; // I think standard size is 30 int toolbarxOffset = 0; int toolbaryOffset = window.frame.size.height - tHeight; CGRect toolbarFrame = CGRectMake(toolbarxOffset, toolbaryOffset, toolbarWidth, toolbarHeight); /////// toolbar ////////////////////// self.myPersistentToolbar = [[UIToolbar alloc] initWithFrame:toolbarFrame]; [window addSubview:self.myPersistentToolbar]; }


No puedo ver la diferencia de lo que probaste, pero finalmente funcionó para mí, con ese código:

////////////////////////////////////////////////////////////////////////////////////////////// /////>>>> Adding buttons for browsing in the toolbar of the popover''s navigation controller/// ////////////////////////////////////////////////////////////////////////////////////////////// //>>>>Create a goBack button goBack = [UIButton buttonWithType:UIButtonTypeCustom]; UIImage *goBackImage = [UIImage imageNamed:@"back1.png"]; [goBack setImage:goBackImage forState:UIControlStateNormal]; [goBack addTarget:self action:@selector(goBackClicked:) forControlEvents:UIControlEventTouchUpInside]; goBack.frame = CGRectMake(0,0,goBackImage.size.width,goBackImage.size.height); //Create a Bar button to hold this button UIBarButtonItem *goBackBarButton = [[[UIBarButtonItem alloc] initWithCustomView:goBack] autorelease]; UIBarButtonItem *flex1 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease]; UIBarButtonItem *addButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind target:nil action:nil] autorelease]; NSArray *arrayOfButtons = [[[NSArray alloc] initWithObjects:goBackBarButton, flex1, addButton, nil] autorelease]; [self setToolbarItems:arrayOfButtons];

Tenga en cuenta algunas diferencias con respecto a la suya (tal vez es ahí donde está el truco: no estoy seguro): 1. mis botones no están asignados localmente en el método, sino en la clase (ya sabe, la propiedad, sintetiza, etc.) 2. la suya

[replyBtn setImage:[UIImage imageNamed:@"Reply_Message.png"] forState:UIControlStateNormal];

donde el mío se ve un poco diferente

[goBack setImage:goBackImage forState:UIControlStateNormal];

Prueba estos pequeños cambios, tal vez funcione :)


Estaba teniendo el mismo problema. Resulta que la barra de herramientas para el UINavigationController restablece sus elementos cada vez que se empuja una nueva vista en la pila. Estaba intentando configurar los elementos de la barra de herramientas en la función applicationDidFinish, y no funcionaba. Funcionó una vez que establecí los itms de la barra de herramientas en la función - (void) viewDidAppear del viewController que se estaba insertando en la pila de navegación.

Por lo tanto, parece que si desea que el controlador de navegación mantenga los mismos elementos de la barra de herramientas en toda la aplicación, debe configurar los elementos de la barra de herramientas en cada vista que inserte en el controlador de navegación después de que aparezca la vista.

¡Espero que eso ayude!