【问题标题】:iOS >> UINavigation Item Back Button Title Doesn't ChangeiOS >> 导航项后退按钮标题不变
【发布时间】:2013-08-26 13:40:28
【问题描述】:

我正在尝试为 UINavigationController 堆栈中的推送 VC 集设置 BACK 按钮。我使用以下代码,但它不起作用 - 我仍然得到以前的 VC 名称显示为后退按钮标题。

-(void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    self.title = @"VC Title";

    UIBarButtonItem* myBackButton = [[UIBarButtonItem alloc]
                                     initWithTitle:@"Back"
                                     style:UIBarButtonItemStyleBordered
                                     target:nil
                                     action:nil];

    self.navigationItem.backBarButtonItem = myBackButton;

}

有人吗?

【问题讨论】:

    标签: ios back-button uinavigationitem


    【解决方案1】:

    在父视图控制器中:

    - (void)viewWillDisappear:(BOOL)animated
    {
        self.title = @"Back";
    }
    
    - (void)viewWillAppear:(BOOL)animated
    {
        self.title = @"Title of your navigation bar";
    }
    

    会成功的

    【讨论】:

      【解决方案2】:

      尝试在父视图控制器的viewDidLoad中设置标题

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

      【讨论】:

      • 谢谢克里斯13。做到了。奇怪的是 self.navigationItem 与下一个 VC 相关,而不是与当前活跃的 VC 相关……知道为什么,或者你有一个很好的解释链接吗?
      • 我也觉得这很奇怪,但 Apple Docs 让它更清晰一些。如果它对你有帮助,请接受答案;)
      • 只需使用 Storyboard - UIController - Naviation Item 并在 Attributes Insprector 中为此视图设置“返回按钮”。 NEXT 视图将使用它作为返回按钮文本。
      【解决方案3】:

      来自 Apple 的文档:

      导航栏左侧的栏按钮项允许导航回导航堆栈上的上一个视图控制器。导航控制器更新导航栏左侧如下:

      如果新的顶级视图控制器有一个自定义的左栏按钮项,则显示该项。要指定自定义左栏按钮项,请设置视图控制器导航项的 leftBarButtonItem 属性。

      如果顶级视图控制器没有自定义左栏按钮项,但前一个视图控制器的导航项在其 backBarButtonItem 属性中有有效项,则导航栏显示该项。

      如果任何一个视图控制器都没有指定自定义栏按钮项,则使用默认的后退按钮,并将其标题设置为前一个视图控制器的 title 属性的值——即视图控制器之一在堆栈上降级。 (如果导航堆栈上只有一个视图控制器,则不会显示返回按钮。)

      希望这会有所帮助。

      【讨论】:

      • 谢谢 johnyu。但是,如果我选择将自定义 barButton 设置为 navigationItem.leftBarButtonItem 的第一个选项,则它没有默认的后退按钮“箭头”形状外观。知道如何解决吗?
      • 谢谢!最后,我设法将我想要的行为赋予了我的后退按钮。
      【解决方案4】:
      self.navigationItem.hidesBackButton = YES;
      self.navigationItem.leftBarButtonItem =[[UIBarButtonItem alloc] initWithTitle:@"Put Any Title"
                                            style:UIBarButtonItemStyleBordered
                                           target:nil
                                           action:nil];
      

      【讨论】:

        【解决方案5】:

        给前一个viewController的navigationItem设置一个backBarButtonItem。 检查这个答案https://stackoverflow.com/a/25680043/111277。详细分析请查看我的博文iOS Set Navigation Bar Back Button Title

        【讨论】:

          【解决方案6】:

          另一种解决方案,非常快。

          在您的基本视图控制器中覆盖此方法,您将在每个推送的视图控制器上都有返回按钮。 (只是不要加[super setTitle:title]

          - (void)setTitle:(NSString *)title
          {
              UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 44)];
              [lbl setText:title];
              [lbl setTextColor:[UIColor whiteColor]];
              [self.navigationItem setTitleView:lbl];
          }
          

          【讨论】:

            【解决方案7】:

            用于情节提要解决方案;

            单击前一个视图控制器的导航项。然后单击右窗格上的属性检查器,然后在后退按钮区域写“”或其他任何内容。这将告诉视图控制器在下一个(子)视图控制器中显示什么。希望对你有帮助

            用于代码解决方案;

            UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:@"back off" style:UIBarButtonItemStyleBordered target:self action:@selector(popView)];
            [[self navigationItem] setBackBarButtonItem:customBarItem];
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-01-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-01-07
              • 2020-12-20
              • 1970-01-01
              相关资源
              最近更新 更多