在导航栏上自定义后退button

在我的应用程序中有许多UINavigationControllers UIViewControllersUINavigationBar上必须有一个“后退”button和一个“home” UIButton 。 所有这一切正常。

但是,我的一些UIViewControllers有很长的名字,有时候还有一个太小的地方。 我试图用自定义的“返回”来replace“返回”button的原始标签(它显示了前一个视图的标题),但无论我尝试它没有工作:

 // Title didn't change [self.navigationItem.backBarButtonItem setTitle:@"Back"]; // Action didn't set, no response from button ( button didn't do anything ) [self.navigationItem.leftBarButtonItem setAction:self.navigationItem.backBarButtonItem.action]; 

而我需要“后退”button有一个像这个问题的风格: 在iPhone导航栏上绘制自定义后退button

尝试这个

 UIBarButtonItem *backBarBtnItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(popViewController)]; [self.navigationItem setBackBarButtonItem:backBarBtnItem]; - (void)popViewController { [self.navigationController popViewControllerAnimated:YES]; } 

尝试以下。 它肯定会工作:

 - (void)viewDidLoad { [super viewDidLoad]; UIImage *buttonImage = [UIImage imageNamed:@"back.png"]; UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setImage:buttonImage forState:UIControlStateNormal]; button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height); [button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button]; self.navigationItem.leftBarButtonItem = customBarItem; [customBarItem release]; } - (void)back { [self.navigationController popViewControllerAnimated:YES]; } 

确保你的名字为back.png资源文件夹中有一个导航条返回button的大小的button图像。

如果需要其他帮助,请随时来。

目标:将 UINavigationBar上的所有后退button自定义为白色图标

步骤: 1.在AppDelete的“didFinishLaunchingWithOptions”方法中:

UIImage * backBtnIcon = [UIImage imageNamed:@“navBackBtn”];

 if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { [UINavigationBar appearance].tintColor = [UIColor whiteColor]; [UINavigationBar appearance].backIndicatorImage = backBtnIcon; [UINavigationBar appearance].backIndicatorTransitionMaskImage = backBtnIcon; }else{ UIImage *backButtonImage = [backBtnIcon resizableImageWithCapInsets:UIEdgeInsetsMake(0, backBtnIcon.size.width - 1, 0, 0)]; [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -backButtonImage.size.height*2) forBarMetrics:UIBarMetricsDefault]; } 

2.在普通超级ViewController类的“viewDidLoad”方法中:

  if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]; [self.navigationItem setBackBarButtonItem:backItem]; }else{ //do nothing } 

如果你像我一样在这个地方做这个,你最好把Anil的解决scheme作为一个类别来实现:

 @interface UIViewController (CustomBackButton) - (void) setCustomBackButton; - (void) back; @end @implementation UIViewController (CustomBackButton) - (void) setCustomBackButton { UIImage *buttonImage = [UIImage imageNamed:@"back.png"]; UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setImage:buttonImage forState:UIControlStateNormal]; button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height); [button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button]; self.navigationItem.leftBarButtonItem = customBarItem; } - (void) back { [self.navigationController popViewControllerAnimated:YES]; } @end 

更简单地说:

 UIBarButtonItem *barBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Indietro" style:UIBarButtonItemStyleBordered target:self action:@selector(pop)]; [barBtnItem setTintColor:[UIColor whiteColor]]; self.navigationItem.leftBarButtonItem = barBtnItem; 

假设你有两个控制器 – Controller1和Controller2。 Controller2从Controller1被推送。 所以在从Controller1导航控制器上推Controller2之前

 Controller2 *controller2 = [[[Controller2 alloc] init]autorelease]; self.navigationItem.hidesBackButton = YES; 

现在,在Controller2的viewDidLoad:方法中,添加以下片段

 UIBarButtonItem *backBarButtonItem =[[[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(goBackToAllPets:)]autorelease]; self.navigationItem.leftBarButtonItem = backBarButtonItem; 

并在backButtonClicked方法中,您可以执行您想要的检查。