【问题标题】:Add a back arrow to leftBarButtonItem?向 leftBarButtonItem 添加后退箭头?
【发布时间】:2014-01-07 12:01:58
【问题描述】:

我想为leftBarButtonItem 添加一个后退箭头,使它在视觉上看起来就像是一个常规的后退按钮,尽管它的功能略有不同。

有没有办法做到这一点?

【问题讨论】:

标签: ios objective-c ipad uinavigationbar uibarbuttonitem


【解决方案1】:

如果您使用导航控制器,您可以使用自定义按钮并隐藏后退按钮。

要隐藏后退按钮,请使用:

self.navigationItem.hidesBackButton = YES;

对于自定义按钮:

UIButton * customButton = [UIButton buttonWithType:UIButtonTypeCustom];
[customButton setBackgroundColor:[UIColor colorWithRed:197.0/255.0 green:190.0/255.0 blue:157.0/255.0 alpha:1.0]];
[customButton setTitle:@"Do Something" forState:UIControlStateNormal];
customButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:11.0f];
[customButton.layer setCornerRadius:3.0f];
[customButton.layer setMasksToBounds:YES];
[customButton.layer setBorderWidth:1.0f];
[customButton.layer setBorderColor: [[UIColor grayColor] CGColor]];
customButton.frame=CGRectMake(0.0, 100.0, 50.0, 25.0);
[customButton addTarget:self action:@selector(customMethod:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem * customItem = [[UIBarButtonItem alloc] initWithCustomView:customButton];
customItem.tintColor=[UIColor blackColor];
self.navigationItem.leftBarButtonItem = customItem;

这对你有用。 快乐编码

【讨论】:

    【解决方案2】:

    如果您使用 UINavigationController 然后推送新的视图控制器,它将自动显示返回按钮。 如果你没有使用 UINavigationController 而不是

    使用自定义 UIButton 与背景图像

    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
    backButton.frame = CGRectMake(0, 0, 48, 37);
    [backButton addTarget:self action:@selector(backButtonTapped) forControlEvents:UIControlEventTouchUpInside];
    backButton.showsTouchWhenHighlighted = YES;
    
    UIImage *backButtonImage = [UIImage imageNamed:@"back-button.png"];
    [backButton setImage:backButtonImage forState:UIControlStateNormal];
    
    backButton.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10);
    
    UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
    self.navigationItem.leftBarButtonItem = backBarButtonItem;
    

    您可以根据需要更改框架和 imageEdgeInsets 的值。

    请参阅this SO 答案。

    【讨论】: