2011-08-16 9 views
5

Ho aggiunto la barra degli strumenti utilizzando Interface Builder, ma ho bisogno di aggiungere i pulsanti in fase di esecuzione/condizionatamente. Non ricevo errori, ma i miei pulsanti dinamici non vengono visualizzati sulla barra degli strumenti. Ho verificato che arrayOfModulesScreens è caricato con i dati di cui ho bisogno. Almeno funziona (:)). Devo aggiungere i pulsanti a un UIView, quindi aggiungere quella vista alla barra degli strumenti? Sto solo pensando ad alta voce. Forse c'è un approccio migliore per cominciare? Grazie in anticipo per qualsiasi indizio che porti alla risoluzione.Come si aggiunge UIButton a UIToolBar a livello di programmazione?

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]; 
} 

risposta

8

Se si sta in realtà vogliono aggiungere un UIBarButtonItem (non un UIButton) per la barra degli strumenti, è sufficiente creare uno o più UIBarButtonItems, inserirli in un NSArray (o NSMutableArray) e assegnare tale array alla proprietà items della barra degli strumenti. Vedi the UIBarButtonItem documentation per i dettagli. Utilizzando il codice di cui sopra, che potrebbe essere simile a questo:

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; 

(si sarebbe, naturalmente, quindi bisogno di cambiare il vostro buttonClick: aspettarsi un UIBarButtonItem invece di un UIButton).

Se sei veramente voler mettere un UIButton in là, è necessario prima di avvolgere l'UIButton in un UIBarButtonItem, qualcosa di simile:

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

Poi aggiungere l'elemento alla barra degli strumenti di cui sopra.


Per quanto riguarda il motivo per cui i pulsanti non vengono visualizzati nel codice postato, il problema è che UIButton di buttonWithType: crea un pulsante con la larghezza e l'altezza pari a zero a zero. Dovresti ridimensionare il pulsante (manualmente o usando sizeToFit dopo aver impostato il titolo) per farlo visualizzare. Dopo averlo corretto, si vedrà che i pulsanti sono tutti sovrapposti nell'angolo in alto a sinistra della vista genitore; avresti bisogno di posizionarli manualmente come appropriato.

+1

Che ha funzionato come un fascino. Voi ragazzi siete fantastici! – iamtoc

+0

Ciò ha perfettamente senso del motivo per cui non è stata visualizzata alcuna immagine.Grazie per avermi contattato e per aver fornito un'alternativa migliore. – iamtoc

1

Non penso che sia possibile modificare lo navigationController direttamente nel codice in questo modo.

Un modo più sicuro sarebbe questo:

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

ToolBar Approach

Un problema con l'aggiunta UIButton a UIToolBar è che la larghezza del pulsante e posizionamento dei tasti è difficile da controllare

Approccio più semplice

Rimuovere la barra degli strumenti e posizionare un UIView con l'immagine di sfondo identica alla barra degli strumenti. Ora è possibile aggiungere UIButton come sottoview a quella vista. In questo modo hai più controllo sul posizionamento e sulla larghezza dei pulsanti. Inoltre puoi aggiungere anche altre viste.