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

Posted

技术标签:

【中文标题】如何在所有视图控制器中将自定义 uibarbuttonItem 添加到我的导航项?【英文标题】:How can i add a custom uibarbuttonItem to my navigation item in all view controllers? 【发布时间】:2012-07-03 11:42:54 【问题描述】:

我正在尝试将自定义 UIBarButtonItem 添加到我的导航项。这个按钮将在我所有的视图控制器中可用。因此,我没有将它添加到每个viewDidLoad 中的每个viewDidLoad 方法中,而是尝试将它添加到我的应用程序Delegate 类中的一个单独的方法中,我将在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];

完美运行。 知道为什么吗?

【问题讨论】:

什么是导航?它是一个视图控制器吗? nav 是我的 UINavigationController 【参考方案1】:

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

【讨论】:

感谢您的回答!我将它用于我的自定义导航控制器,但我忘记将它用于我的 UIViewController ......再次感谢提醒;)完美!【参考方案2】:

你不应该使用这个self.nav.navigationController,因为nav是一个UINavigationController然后不要得到.navigationController

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

【讨论】:

以上是关于如何在所有视图控制器中将自定义 uibarbuttonItem 添加到我的导航项?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将内容包装为自定义视图

在 Swift 中将自定义 UITableViewCell 共享到多个 UITableViewController

如何在自定义视图中将子视图的框架设置为其父框架

如何在 android 的 setContentView 中将自定义布局设置为主视图

如何在swift中将标题视图添加到每个自定义tableViewCells

如何在swift ios中将多个图像添加到自定义表格视图单元格?