以编程方式导航控制器后退按钮标题(无情节提要)[重复]

Posted

技术标签:

【中文标题】以编程方式导航控制器后退按钮标题(无情节提要)[重复]【英文标题】:Navigation controller back button title programmatically (no storyboard) [duplicate] 【发布时间】:2013-12-16 13:55:09 【问题描述】:

嘿, 我是导航控制器的新手,我有一个问题应该很简单: 如何将左侧站点上的“后退”项目更改为标题“后退”而不是前一个视图的标题? 我试过这个:

self.navigationItem.leftBarButtonItem.title =@"Back";

它不起作用,即使我可以使用类似的代码在左侧添加图像,如下所示:

CGRect frame = CGRectMake(0, 0, 22.5, 22.5);
    UIButton *closeButton = [[UIButton alloc] initWithFrame:frame];
    [closeButton setBackgroundImage:UA_ICON_CLOSE_UI forState:UIControlStateNormal];
    [closeButton addTarget:self action:@selector(closeView)
         forControlEvents:UIControlEventTouchUpInside];
    [closeButton setShowsTouchWhenHighlighted:YES];

    UIBarButtonItem *rightButton =[[UIBarButtonItem alloc] initWithCustomView:closeButton];
    self.navigationItem.rightBarButtonItem=rightButton;

【问题讨论】:

看这里:***.com/questions/9871578/… 这和c4标签有什么关系? 我不确定这是否与我的观点是 C4Views 有关系... 我们如何知道您的观点是C4Views?您没有在问题的任何地方指出这一点。此时这个问题与c4标签无关 【参考方案1】:

你必须提前在视图控制器中编写这段代码,也就是说,当这个视图控制器在视图控制器堆栈中并且你移动到一个新的视图控制器时,在新的视图控制器中“返回”按钮将是显示在左上角,而不是标题。

如果你这样写, self.navigationItem.leftBarButtonItem = nil 或创建另一个UIBarButtonItem,但这不会返回并且默认情况下没有漂亮的后退箭头。如果你这样设置,这将是这个视图控制器的一个按钮。但是你可以给它一个动作来关闭视图控制器并返回。

对象-C:

#define NAVBAR_BUTTON_BACK      @"Back"

UIBarButtonItem * nextBack = [[UIBarButtonItem alloc]
                                  initWithTitle:NAVBAR_BUTTON_BACK
                                  style:UIBarButtonItemStyleBordered
                                  target:nil action:nil];
    self.navigationItem.backBarButtonItem = nextBack;
    [nextBack release];

斯威夫特:

navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

【讨论】:

ahm,有点工作,但不完全是:我现在有这个:self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:@selector(回去)]; -(void)goBack [self.navigationController popViewControllerAnimated:YES]; 但它不起作用。那么如何添加操作呢? 你必须改变,目标:自我。但是第一个解决方案更好。在上一个视图控制器中,您必须为下一个视图控制器的后退按钮标题编写代码。 哈哈,愚蠢的我。那么如果我想让漂亮的后退默认箭头保持不变呢?有什么方法可以重新添加吗?【参考方案2】:

UIBarButtonItem+WithImageOnly.h

#import <UIKit/UIKit.h>

@interface UIBarButtonItem (WithImageOnly)

- (id)initWithImageOnly:(UIImage*)image target:(id)target action:(SEL)action;

@end

UIBarButtonItem+WithImageOnly.m

#import "UIBarButtonItem+WithImageOnly.h"

@implementation UIBarButtonItem (WithImageOnly)

- (id)initWithImageOnly:(UIImage *)image target:(id)target action:(SEL)action 
    CGRect frame = CGRectMake(0, 0, image.size.width, image.size.height);
//    frame = CGRectInset(frame, 0, 0);

    UIButton *button = [[UIButton alloc] initWithFrame:frame];
    [button setImage:image forState:UIControlStateNormal];
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];

    return [self initWithCustomView:button];


@end

示例用法:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImageOnly:[UIImage imageNamed:@"SS-01-navbar-back-button.png"]
                                                                      target:self
                                                                      action:@selector(backTarget:)];
    self.navigationItem.leftBarButtonItem = backButton;

【讨论】:

以上是关于以编程方式导航控制器后退按钮标题(无情节提要)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法更改导航项后退按钮的文本

如何清除导航堆栈以使后退按钮不出现?

以编程方式创建带有后退按钮的导航控制器

以编程方式创建的后退按钮未显示在导航栏中?

如何以编程方式从情节提要中填充静态 UITableView?

如何从情节提要以编程方式加载 UIViewController?