пытаясь программно создать rightBarButtonItem - PullRequest
14 голосов
/ 19 января 2010

Это не похоже на работу. Что я делаю неправильно?

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

Ответы [ 3 ]

22 голосов
/ 10 февраля 2012

я предполагаю, что вы добавили UIBarButtonItem к неправильному объекту! вам нужно добавить его в rootViewController (вместо UINavigationController, как вы, вероятно, сделали)

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];
11 голосов
/ 19 января 2010

Я бы обычно помещал этот код в метод viewDidLoad, а не в метод awakeFromNib; Я не уверен, в этом ли твоя проблема. Что значит "не работает"?

3 голосов
/ 13 ноября 2010

Попробуйте вместо этого:

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

}
...