UINavigationController"后退按钮"自定义文本?

Ali*_*fai 147 iphone uinavigationcontroller ios

默认情况下,"后退按钮"显示堆栈中最后一个视图的标题,是否有办法在后退按钮中使用自定义文本?

rei*_*ein 340

这个链接:

self.navigationItem.backBarButtonItem =
   [[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
            style:UIBarButtonItemStylePlain
           target:nil
           action:nil];
Run Code Online (Sandbox Code Playgroud)

正如泰勒在评论中所说:

不要在可见视图控制器中执行此操作,而是在视图控制器中执行此操作,如果您单击后退按钮

  • 另请注意,您需要在视图控制器的一层上方执行此操作.换句话说,不要在可见视图控制器中执行此操作,而是在视图控制器中执行此操作,如果您单击后退按钮. (217认同)
  • 只是为了澄清Tyler的评论,因为我一开始并不理解这一点:在视图中设置backBarButtonItem控制器navigationItem正在设置将显示的按钮以返回到此视图控制器.另请注意,虽然箭头按钮没有按钮样式,但此按钮仍将获得箭头样式.我使用了UIBarButtonItemStylePlain并仍然获得箭头按钮样式. (6认同)
  • 你应该'释放'`UIBarButtonItem`. (4认同)
  • 建议:不要假设样式,而是传递当前设置的样式.在这个答案的代码中,通过调用属性`self.navigationItem.backBarButtonItem.style`来替换`UIBarButtonItemStyleBordered`.文档:https://developer.apple.com/library/ios/documentation/uikit/reference/UIBarButtonItem_Class/Reference/Reference.html#//apple_ref/occ/instp/UIBarButtonItem/style (3认同)

Pet*_*ler 43

您可以在Interface Builder中设置文本:

选择后退按钮将返回的ViewController的导航项:

在此输入图像描述

在实用工具面板属性检查器中,输入后退按钮的标签:

在此输入图像描述

我更喜欢这种方法而不是在接受的答案中设置代码中的标题.

另请注意,您需要在视图控制器的一层上方执行此操作.换句话说,不要在可见视图控制器中执行此操作,而是在视图控制器中执行此操作,如果您单击后退按钮.
--Tyler

  • 需要说明的是,这需要在视图控制器的导航项上设置,而不是在视图控制器的属性检查器本身上设置. (2认同)
  • 从Xcode 6.1.1开始,并在iOS 7中运行时,您原来的前一个视图标题似乎仍将覆盖您在此处设置的任何后退按钮标题.如果前一个视图的标题包含超过11个字符的限制,则下一个视图的后退按钮将简单地说"返回".除了从头开始创建一个新的导航栏项目之外没有任何办法,如此处的最高投票答案所示. (2认同)

小智 22

我用这个:

// In the current view controller, not the one that is one level up in the stack
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationController.navigationBar.backItem.title = @"Custom text";
}
Run Code Online (Sandbox Code Playgroud)

  • 这会将控制器的后退按钮标题更改为堆栈.它不会更改当前显示的控制器的后退按钮标题.更糟糕的是:它改变了前一个控制器之前控制器的标题! (3认同)

Aub*_*man 11

我通过在将另一个控制器推入堆栈之前简单地设置控制器的标题找到了一个方便的解决方案,如下所示:

self.navigationItem.title = @"Replacement Title";
[self.navigationController pushViewController:newCtrl animated:YES];
Run Code Online (Sandbox Code Playgroud)

然后,确保将原始标题设置为viewWillAppear,如下所示:

-(void)viewWillAppear:(BOOL)animated
{
  ...
  self.navigationItem.title = @"Original Title";
  ...
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为UINavigationController在推送操作期间构造后退按钮时的默认行为是使用前一个控制器的标题.


Add*_*Dev 7

后退按钮的标题默认为上一个视图的标题,因此我使用的一个快速技巧是将以下代码放在上一个视图的.m文件中.

-(void)viewWillAppear:(BOOL)animated {

    // Set title
    self.navigationItem.title=@"Original Title";
}

-(void)viewWillDisappear:(BOOL)animated {

    // Set title
    self.navigationItem.title=@"Back";
}
Run Code Online (Sandbox Code Playgroud)

  • 使用此方法,在推动动画发生之前,会注意到父视图的标题被更改为"Back".(而且,sorta很糟糕,如果你将它移动到viewDidDisappear方法,你会看到推动后发生切换..) (2认同)

val*_*ine 6

在init方法中,添加以下代码:

- (id)initWithStyle:(UITableViewStyle)style {
    if(self = [super init]) {

        //...

        UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                                             style:UIBarButtonItemStylePlain 
                                            target:self 
                                            action:@selector(goBack)];
        self.navigationItem.leftBarButtonItem = customBackButton;
        [customBackButton release];

        //...
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

然后添加一个简单的方法,以允许viewcontroller解雇:

-(void)goBack {
    [self.navigationController popViewControllerAnimated:YES];  
}
Run Code Online (Sandbox Code Playgroud)