在UINavigationBar上用左侧的标准箭头创build一个自定义的左后退button

当我创build一个自定义后退button时,我使用下面的代码:

UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]initWithTitle:@"Yeah" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonPressed:)]; self.navigationItem.leftBarButtonItem = leftButton; 

这工作正常,我得到这个结果:

在这里输入图像说明

我会有相同的结果,但在左边的箭头,像这样(当它是一个标准的后退button,而不是一个自定义的):

在这里输入图像说明

我怎样才能简单地添加这个箭头?

最简单的做法是在父控制器中设置标题(即你想导航的标题)。 如果你不希望它与VC视图中显示的实际标题相同,你可以将viewWillDisappear中的标题更改为下一个VC的后退button所需的内容,然后将其更改回到你想要的内容家长在viewWillAppear。

如果您正在使用故事板,您也可以直接在IB中设置后面的标题。

最后,为了创build一个自定义的后退button,你可以做如下的事情:

 self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Details" style:UIBarButtonItemStyleBordered target:nil action:nil]; 

…只要确保在呈现(或父视图)控制器中执行此操作,而不是正在加载的视图控制器(呈现的控制器)。

最后,这里是我用来定义当前视图中的标准左箭头不是父视图中的后退button标题的片段:

 - (void)viewDidLoad { [super viewDidLoad]; [self setTitle:@"Current View"]; // Get the previous view controller UIViewController *previousVC = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count - 2]; // Create a UIBarButtonItem UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"FooBar" style:UIBarButtonItemStyleBordered target:self action:@selector(yourSelector)]; // Associate the barButtonItem to the previous view [previousVC.navigationItem setBackBarButtonItem:barButtonItem]; } 

结果如下:

在这里输入图像说明

注意:但是,因为不可能在backBarButtonItem上添加一个动作,所以如果你愿意,可以参考这个好post 。

 UIButton * backButton = [UIButton buttonWithType:UIButtonTypeCustom]; [backButton addTarget:self action:@selector(popViewController) forControlEvents:UIControlEventTouchUpInside]; [backButton setFrame:FRAME_DEFINE [backButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft]; [backButton setExclusiveTouch:YES]; [backButton setImage:[UIImage imageNamed:BACK_BUTTON_DEFAULT_ICON] forState:UIControlStateNormal]; [backButton setTitle:@"BACK" forState:UIControlStateNormal]; [backButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; UIBarButtonItem *backMenuBarButton = [[UIBarButtonItem alloc] initWithCustomView:backButton]; self.navigationItem.leftBarButtonItem = backMenuBarButton; 

那么你需要去与背景图像和标题和

 // Creates a back button instead of default behaviour (displaying title of previous screen) UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(backAction)]; tipsDetailViewController.navigationItem.leftBarButtonItem = backButton; [backButton release]; 

我使用如下代码:

 UIBarButtonItem *leftBar = [[UIBarButtonItem alloc] init]; leftBar.title = @"Back";//Details self.navigationController.navigationBar.topItem.backBarButtonItem = leftBar;