在导航控制器类的类别中添加左右栏button项目

我创build了一个导航控制器的类别,设置标题和左右栏button在视图中加载了这个导航控制器类(这个类的类)。

- (void)viewDidAppear:(BOOL)animated { NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."]; if ([[ver objectAtIndex:0] intValue] >= 7) { self.navigationBar.barTintColor = [UIColor colorWithRed:229.0f/255.0f green:114.0f/255.0f blue:89.0f/255.0f alpha:1.0f]; self.navigationBar.translucent = NO; }else{ self.navigationBar.tintColor = [UIColor colorWithRed:229.0f/255.0f green:114.0f/255.0f blue:89.0f/255.0f alpha:1.0f]; } UILabel *lblTitleView=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 170, 44)]; [lblTitleView setTextColor:[UIColor whiteColor]]; [lblTitleView setFont:[UIFont boldSystemFontOfSize:17]]; [lblTitleView setText:[self SetnavigationTitle:self.navigationItem.title]]; [lblTitleView setTextAlignment:NSTextAlignmentCenter]; [lblTitleView setBackgroundColor:[UIColor clearColor]]; [self.navigationItem setTitleView:lblTitleView]; // UINavigationController*navCnt = [[UINavigationController alloc] init]; UIButton *btnLeft=[UIButton buttonWithType:UIButtonTypeCustom]; [btnLeft setFrame:CGRectMake(0, 5, 32, 32)]; [btnLeft setImage:[UIImage imageNamed:@"btn_back.png"] forState:UIControlStateNormal]; [btnLeft setImage:[UIImage imageNamed:@"btn_back.png"] forState:UIControlStateHighlighted]; [btnLeft setTitle:[NSString stringWithFormat:@"%@",[self SetleftbarbuttonTitle:self.navigationItem.leftBarButtonItem.title]] forState:UIControlStateNormal]; [btnLeft setTintColor:[UIColor grayColor]]; [btnLeft setBackgroundColor:[UIColor greenColor]]; [btnLeft setTag:101]; [btnLeft addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *leftBarButton=[[UIBarButtonItem alloc]initWithCustomView:btnLeft]; [self.navigationItem setLeftBarButtonItem:leftBarButton]; self.navigationItem.hidesBackButton=YES; UIButton *btnRight=[UIButton buttonWithType:UIButtonTypeCustom]; [btnRight setFrame:CGRectMake(270, 5, 32, 32)]; [btnRight setImage:[UIImage imageNamed:@"btn_back.png"] forState:UIControlStateNormal]; [btnRight setImage:[UIImage imageNamed:@"btn_back.png"] forState:UIControlStateHighlighted]; [btnRight setTitle:[NSString stringWithFormat:@"%@",[self SetRightbarbuttonTitle:self.navigationItem.rightBarButtonItem.title]] forState:UIControlStateNormal]; [btnRight setTintColor:[UIColor clearColor]]; [btnRight setBackgroundColor:[UIColor greenColor]]; [btnRight setTag:102]; [btnRight addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *rightBarButton=[[UIBarButtonItem alloc]initWithCustomView:btnRight]; [self.navigationItem setRightBarButtonItem:rightBarButton]; [super viewDidAppear:animated]; } 

当我只是从任何视图控制器通过标题,然后其工作正常的每个视图控制器,但现在我有代码设置导航控制器子类中的左和右栏button项。

但现在在视图控制器上我没有得到这个视图控制器上的导航控制器的uibarbutton项目。 提前致谢。

试试这个:

显示导航控制器的leftBarButtonItem

  UIImage *faceImage = [UIImage imageNamed:@"back_arrow.png"]; UIButton *face = [UIButton buttonWithType:UIButtonTypeCustom]; face.bounds = CGRectMake( 10, 0, faceImage.size.width, faceImage.size.height ); [face addTarget:self action:@selector(handleBack:) forControlEvents:UIControlEventTouchUpInside]; [face setImage:faceImage forState:UIControlStateNormal]; UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:face]; self.navigationItem.leftBarButtonItem = backButton; [self.navigationItem setHidesBackButton:YES animated:YES]; [self.navigationItem setLeftBarButtonItem:nil animated:NO]; [self.navigationItem setBackBarButtonItem:nil]; 

显示导航控制器的rightBarButtonItem

 UIImage *faceImage1= [UIImage imageNamed:@"slideshowarrow"]; UIButton *face1 = [UIButton buttonWithType:UIButtonTypeCustom]; face1.bounds = CGRectMake( 10, 0, faceImage1.size.width, faceImage1.size.height ); [face1 addTarget:self action:@selector(Goto_nextView) forControlEvents:UIControlEventTouchUpInside]; [face1 setImage:faceImage1 forState:UIControlStateNormal]; UIBarButtonItem *backButton1 = [[UIBarButtonItem alloc] initWithCustomView:face1]; self.navigationItem.rightBarButtonItem = backButton1; 

设置button框架的作品或使用下面的代码左和右button。 它的作品100%

 UIImage* buttonImage = [UIImage imageNamed: @"header.navigation.back.png"]; UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom]; [aButton setImage:buttonImage forState:UIControlStateNormal]; aButton.frame = CGRectMake(0.0, 0.0, buttonImage.size.width/2, 32); UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:aButton]; [aButton addTarget:self action:@selector(backToPriorView) forControlEvents:UIControlEventTouchUpInside]; self.navigationItem.leftBarButtonItem = backButton; 

Swift 4.0

 let btnBack = UIButton(type: .custom) btnBack.bounds = CGRect(x: 0, y: 0, width: 44, height: 44) btnBack.addTarget(self, action: #selector(self.backButtonAction(sender:)), for: .touchUpInside) btnBack.setImage(#imageLiteral(resourceName: "back_image"), for: .normal) let leftBarButton = UIBarButtonItem(customView: btnBack) self.navigationItem.setLeftBarButton(leftBarButton, animated: true) 

//后退button操作

 @objc func backButtonAction(sender: UIButton) { self.navigationController?.popViewController(animated: true) }