2010-01-19 85 views
14

這似乎沒有工作。我究竟做錯了什麼?試圖以編程方式創建rightBarButtonItem

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

史蒂夫的有關觀點評論沒有負載聽起來可能,我都嘗試使用setter方法setRightBarButtonItem如果仍然沒有按沒有工作。 – 2010-01-19 01:11:22

回答

11

我通常把這個代碼在viewDidLoad方法,而不是awakeFromNib方法;我不確定這是你的問題所在。 「不工作」是什麼意思?

+0

不工作意味着該按鈕不顯示在導航欄中。 – 2010-01-19 01:13:52

+0

Steve是對的。請將其加載到-viewDidLoad中。 -awakeFromNib不會在視圖控制器中調用 - 只能在UIView類中調用。 – 2010-01-19 04:01:22

+8

史蒂夫和馬特都錯了。這個代碼在'-awakeFromNib'中很好,當且僅當VC本身實際上是從一個nib加載的。馬特,'-awakeFromNib'在每個由nib創建的對象上調用,包括VC的。最有可能的是VC本身不在筆尖,但它使用筆尖,因此Sam的困惑。在這種情況下,它應該放在'-initWithNibName:bundle:'中。 – 2011-02-11 20:54:11

3

試試這個:

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

爲什麼沒有必要明確地發佈這個,只是出於好奇? – diatrevolo 2011-04-06 15:30:08

+1

因爲它是autoreleased。 – pt2ph8 2011-07-09 23:12:19

21

我的猜測是,您添加到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]; 
+1

這對我來說很重要,我試圖將按鈕分配給導航控制器,而不是rootViewController。這應該是被接受的答案。 – 2012-09-17 06:02:10

+0

太棒了!!.... – 2016-02-26 09:26:40