2011-08-16 14 views
5

He agregado la barra de herramientas usando el Interface Builder, pero necesito agregar los botones en tiempo de ejecución/condicionalmente. No recibo ningún error, pero mis botones dinámicos no aparecen en la barra de herramientas. He verificado que arrayOfModulesScreens está cargado con los datos que necesito. Al menos eso funciona (:)). ¿Debo agregar los botones en una UIView y luego agregar esa vista a la barra de herramientas? Solo pensando en voz alta. Tal vez hay un mejor enfoque para comenzar? Gracias de antemano por cualquier pista que conduzca a la resolución.¿Cómo se puede agregar UIButton a UIToolBar programmatically?

CustomFormController.h

@interface CustomFormController : UIViewController { 
    UIToolbar *screensBar; 
} 

CustomFormController.m

EPData *epData = [[EPData alloc] init]; 
NSArray *screens = [epData loadPlistIntoArray:@"Screens"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"process_module_id == %@", process_modulesID]; 
NSArray *arrayOfModulesScreens = [screens filteredArrayUsingPredicate:predicate]; 

for(int i=0; i < [arrayOfModulesScreens count]; i++) { 
    NSDictionary *dictRow = [arrayOfModulesScreens objectAtIndex:i]; 
    UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
    [button setTitle:[dictRow objectForKey:@"screen_title"] forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; 
    [screensBar addSubview:button]; 
} 

Respuesta

8

Si en realidad se está esperando para añadir un UIBarButtonItem (no un UIButton) a la barra de herramientas, que acaba de crear uno o más UIBarButtonItems, colóquelos en un NSArray (o NSMutableArray) y asigne ese conjunto a la propiedad items de la barra de herramientas. Ver the UIBarButtonItem documentation para más detalles. Usando el código de arriba, que podría ser algo como esto:

NSMutableArray *items = [NSMutableArray array]; 
    for (int i = 0; i < [arrayOfModulesScreens count]; i++) { 
     NSDictionary *dictRow = [arrayOfModulesScreens objectAtIndex:i]; 
     UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:[dictRow objectForKey:@"screen_title"] 
                    style:UIBarButtonItemStyleBordered 
                    target:self 
                    action:@selector(buttonClick:)]; 
     [items addObject:button]; 
     [button release]; 
    } 
    screensBar.items = items; 

(que sería, por supuesto, a continuación, necesita cambiar su buttonClick: esperar un UIBarButtonItem en lugar de un UIButton).

Si realmente querer poner un UIButton allí, primero tiene que envolver el UIButton en un UIBarButtonItem, algo como esto:

UIBarButtonItem *item = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease]; 

A continuación, añadir el artículo a la barra de herramientas que el anterior.


cuanto a por qué los botones no aparecen en el código publicado, el problema es que UIButton de buttonWithType: crea un botón con ancho cero y altura cero. Tendrá que cambiar el tamaño del botón (manualmente o usando sizeToFit después de configurar el título) para que se muestre. Después de corregir eso, verá que los botones están uno encima del otro en la esquina superior izquierda de la vista principal; Debería colocarlos manualmente según corresponda.

+1

Eso funcionó como un amuleto. ¡Chicos, ustedes son estupendos! – iamtoc

+0

Eso tiene perfecto sentido en cuanto a por qué no se mostró ninguna imagen.Gracias por tocar eso y por brindar una mejor alternativa. – iamtoc

1

No creo que pueda cambiar el navigationController directamente en su código de esa manera.

Una forma más segura sería la siguiente:

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:[dictRow objectForKey:@"screen_title"] 
                  style:UIBarButtonItemStyleBordered 
                  target:self 
                  action:@selector(buttonClick:)]; 
self.navigationItem.rightBarButtonItem = button; 
1

Enfoque barra de herramientas

Uno de los problemas con el adición UIButton a UIToolBar es que la anchura del botón y el posicionamiento de los botones es difícil de controlar

Enfoque más simple

Quite la barra de herramientas y coloque un UIView con la imagen de fondo que es idéntica a su barra de herramientas. Ahora puede agregar UIButton como una subvista a esa vista. De esta forma, tendrá más control sobre el posicionamiento y el ancho de los botones. También puede agregar otras vistas también.

Cuestiones relacionadas