2009-08-30 22 views
14

Ho un UINavigationController che viene premuto un DetailsViewController. In questo DetailsViewController, voglio utilizzare la barra degli strumenti fornita con ogni UINavigationController (almeno da iPhone OS3.0).UIToolbar elementi non visualizzati

Così, in viewDidLoad nel mio DetailsViewController creo un UIBarButtonItem, lo aggiungo ad un allineamento e la mano fuori al controller di navigazione:

- (void) viewDidLoad { 
    UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(selectTemplate)]; 
    NSArray *items = [NSArray arrayWithObject: item]; 

    TestUIAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
    UINavigationController *navController = delegate.navigationController; 

    [navController setToolbarItems: items animated:NO];  
    [navController setToolbarHidden: NO animated: YES]; 
} 

Ma, per qualche ragione, mentre l'UIToolbar è animato su per lo schermo, l'elemento non viene aggiunto alla barra degli strumenti.

Esiste una sorta di ordine specifico che le cose devono essere fatte con UIToolbar perché funzioni?

P.S .: l'applicazione è in modalità orizzontale (forzata) e il navigationController.view ha una trasformazione di rotazione su di esso. Potrebbe avere qualcosa a che fare con questo?

risposta

37

Ho fatto ancora un po 'di scavi e debug e sono giunto alla conclusione che il mio tentativo di modificare lo navigationController era sbagliato. Invece avrei dovuto semplicemente impostare la proprietà toolbarItems di DetailsViewController.

Dopo di che, il mio codice ha funzionato bene:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemBookmarks target:self action:@selector(selectTemplate)]; 

     NSArray *myToolbarItems = [[NSArray alloc] initWithObjects: item, nil];   
     [self setToolbarItems: myToolbarItems]; 
     [myToolbarItems release]; 

    } 
    return self; 
} 
+1

commento breve - che l'allocazione UIBarButtonItem sembra che otterrà trapelato. Probabilmente dovresti impostarlo su autorelease. –

+1

Oh, giusto. Ma il NSArray lo mantiene, quindi potrei semplicemente rilasciare _item_ dopo averlo aggiunto all'array, giusto? – NSSec

+0

Ho fatto un -1 su questo cos cos'hai permesso di visualizzarlo per quel viewcontroller, non segue tutti i controllori di vista successivi attraverso la vita della navigazione ... che è quello che la maggior parte delle barre degli strumenti sono solite fare. – Jann