iOS 在整个导航控制器中显示相同的 UIBarButton

Posted

技术标签:

【中文标题】iOS 在整个导航控制器中显示相同的 UIBarButton【英文标题】:iOS display same UIBarButton throughout Navigation Controller 【发布时间】:2013-11-17 06:09:05 【问题描述】:

目前我想创建一些按钮并在所有导航控制器中使用它。假设是用于搜索的“搜索/聚焦”按钮,或“添加项目按钮”。这些应该在所有导航控制器中使用。

我试图通过互联网搜索,但仍然不知道如何去做。

【问题讨论】:

【参考方案1】:

或者尝试使用 UINavigationController 类别,并自定义 back item,这样无论推送多少次,都只需为 navigationController 的 back item 设置相同的视图。比如:

@implementation UIViewController (CustomNavigation)

- (void)setLeftBarButtonItem:(UIButton*)leftview
    
    UIBarButtonItem *customItem = [[[UIBarButtonItem alloc] initWithCustomView:leftview] autorelease];
    self.navigationItem.leftBarButtonItem = customItem; 
    [(UIButton*)self.navigationItem.leftBarButtonItem.customView addTarget:self.navigationController action:@selector(popViewControllerAnimated:) forControlEvents:UIControlEventTouchUpInside];

【讨论】:

【参考方案2】:

我使用BaseViewController 作为UIViewController 的子类,并使用BaseViewController 类继承我的所有ViewController。 在viewDidLoad 中放置代码以将您的按钮添加到导航栏。 所有使用BaseViewController 继承的 ViewController 都会有你的按钮。

任何带有 navigationController 和 NavigationBar 的 UIViewController 都有自己的导航按钮,你必须每次都覆盖它。继承你做一次。

@interface BaseViewController : UIViewController
@end

@implementation BaseViewController 
- (void)viewDidLoad 
    [super viewDidLoad];        
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:customView];
  
  @end

【讨论】:

以上是关于iOS 在整个导航控制器中显示相同的 UIBarButton的主要内容,如果未能解决你的问题,请参考以下文章

iOS:视图控制器之间的导航

使用 Storyboards 设置自定义导航栏

iOS – 在导航堆栈中显示一个视图控制器

iOS App 从屏幕顶部偏移

UISearchController 与状态栏重叠并且不填充 iPhone X

iOS:为啥不显示导航栏?