如何在所有视图控制器中向我的导航项添加自定义uibarbuttonItem?

时间:2012-07-03 11:42:55

标签: objective-c ios uinavigationcontroller uiapplicationdelegate

我正在尝试向我的navigationItem添加自定义UIBarButtonItem。此按钮将在我的所有视图控制器中可用。所以不是将其添加到每个viewDidLoad中的每个viewDidLoad方法中,而是尝试将其添加到我的应用程序委托类中,我将在viewDidLoad方法中调用一个单独的方法。 这是我的代码:

 UIImage* image = [UIImage imageNamed:@"some-header-icon.png"];
CGRect frame = CGRectMake(0,0,image.size.width,image.size.height);
UIButton* hellBtn = [[UIButton alloc] initWithFrame:frame];
[hellBtn setBackgroundImage:image forState:UIControlStateNormal];
[hellBtn setShowsTouchWhenHighlighted:NO];
[hellBtn addTarget:self action:@selector(goToHell) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem* rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:hellBtn];
[self.nav.navigationController.navigationItem setRightBarButtonItem:rightBarButtonItem];
[hellBtn release];
[rightBarButtonItem release];

如果我在任何viewController的任何viewDidLoad中替换相同的代码博客并更改

[self.nav.navigationController.navigationItem setRightBarButtonItem:rightBarButtonItem];

人:

[self.navigationItem setRightBarButtonItem:rightBarButtonItem];

完美无缺。 任何想法为什么?

2 个答案:

答案 0 :(得分:3)

为ex创建UIViewController的子类。 UIViewControllerBase,覆盖viewDidLoad方法,然后在其中创建rightBarButtonItem并设置它。然后让所有控制器继承UIViewControllerBase - 简单的OOP场景。

答案 1 :(得分:0)

您不应该使用此self.nav.navigationController,因为navUINavigationController,然后才能获得.navigationController

只需使用[self.navigationItem setRightBarButtonItem:rightBarButtonItem];

即可