2009-08-30 10 views
14

Ich habe einen UINavigationController, der eine DetailsViewController geschoben wird. In diesem DetailsViewController möchte ich die Symbolleiste verwenden, die mit jedem UINavigationController (zumindest seit iPhone OS3.0) geliefert wird.UIToolbar Elemente werden nicht angezeigt

Also, in viewDidLoad in meinem DetailsViewController erstelle ich eine UIBarButtonItem, füge ich es auf ein Array und geben es an die Navigationssteuerung aus:

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

Aber aus irgendeinem Grund, während der UIToolbar auf animiert Zum Anzeigen wird das Element nicht zur Symbolleiste hinzugefügt.

Gibt es eine bestimmte Reihenfolge der Dinge mit der UIToolbar getan werden muss, damit dies funktioniert?

S.S .: Die Anwendung befindet sich im (erzwungenen) Landscape-Modus und die navigationController.view hat eine Rotationstransformation darauf. Könnte das etwas damit zu tun haben?

Antwort

37

Habe noch ein wenig mehr graben und debuggen und ich bin zu der Schlussfolgerung gekommen, dass mein Versuch, die navigationController zu ändern, falsch war. Stattdessen hätte ich einfach die toolbarItems-Eigenschaft des DetailsViewControllers festlegen sollen.

Danach war mein Code fein:

- (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

Kurzkommentar - das UIBarButtonItem Zuordnung sieht aus wie es durchgesickert erhalten wird. Sie sollten es wahrscheinlich auf Autorelease setzen. –

+1

Oh, richtig. Aber das NSArray behält es bei, also könnte ich einfach _item_ freigeben, nachdem ich es dem Array hinzugefügt habe, richtig? – NSSec

+0

Ich habe eine -1 auf diesem cos gemacht, was Sie getan haben, um es für diesen einen Viewcontroller anzuzeigen, es folgt nicht allen nachfolgenden View-Controllern durch das Leben der Navigation ... was die meisten Symbolleisten tun werden. – Jann