2010-01-19 17 views
14

Dies scheint nicht zu funktionieren. Was mache ich falsch?versucht, programmgesteuert zu erstellen rightBarButtonItem

-(void)awakeFromNib{ 
    UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showNewEventViewController)]; 
    self.navigationItem.rightBarButtonItem = rightBarButtonItem; 
    NSLog(@"awaked"); 
    [rightBarButtonItem release]; 
} 
+1

Steve Kommentar über Ansicht hat klingt Last wahrscheinlich, ich alle versuchen würde, die Setter-Methode setRightBarButtonItem zu verwenden, wenn es doesn noch arbeite nicht. –

Antwort

11

Ich würde normalerweise diesen Code in der eher viewDidLoad Methode setzen als die awakeFromNib Verfahren; Ich bin mir nicht sicher, ob das dein Problem ist. Was bedeutet "nicht funktionieren"?

+0

Nicht funktioniert, die Schaltfläche wird nicht in der Navigationsleiste angezeigt. –

+0

Steve hat Recht. Lade es stattdessen in -viewDidLoad. -awakeFromNib wird nicht in einem Ansichtscontroller aufgerufen - nur in einer UIView-Klasse. –

+8

Sowohl Steve als auch Matt liegen falsch. Dieser Code ist in "-awakeFromNib" genau dann, wenn die VC selbst tatsächlich von einer Nib geladen wird. Matt, '-awakeFromNib' wird für jedes einzelne Objekt aufgerufen, das aus einer Nib erstellt wird, einschließlich VCs. Höchstwahrscheinlich ist die VC selbst nicht in einer Schreibfeder, aber sie verwendet eine Schreibfeder, daher Sams Verwirrung. In diesem Fall sollte es in '-initWithNibName: bundle: 'gehen. –

3

Versuchen Sie stattdessen:

- (void) initUI { 
    UIBarButtonItem *btnCancel = [[[UIBarButtonItem alloc] initWithTitle:@"Cancel" 
            style:UIBarButtonItemStyleBordered 
            target:self 
            action:@selector(dismiss)]autorelease];  

    self.navigationItem.rightBarButtonItem = btnCancel; 

    //[btnCancel release]; no need to explicitly release the item 

} 
+3

Warum gibt es keine Notwendigkeit, dies explizit aus Neugier zu veröffentlichen? – diatrevolo

+1

Weil es autoreleased ist. – pt2ph8

21

meine Vermutung ist, dass Sie die UIBarButtonItem auf das falsche Objekt hinzuzufügen! Sie brauchen, um es hinzuzufügen, zu dem RootViewController (statt auf die UINavigationController, wie Sie wahrscheinlich tat)

YourRootViewController *theRootController = [[YourRootViewController alloc] init]; 

UINavigationController* navContainer = [[UINavigationController alloc] initWithRootViewController:theRootController]; 

UIBarButtonItem *btnCancel = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(dismiss)];  
theRootController.navigationItem.rightBarButtonItem = btnCancel 

[navContainer setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
[self presentModalViewController:navContainer animated:YES]; 
+1

Das war die große Sache für mich, ich habe versucht, die Schaltfläche dem Nav-Controller zuweisen, nicht der rootViewController. Dies sollte die akzeptierte Antwort sein. –

+0

Großartig ...! .... –

Verwandte Themen