【问题标题】:How to change uinavigationbar back button text如何更改 uinavigationbar 后退按钮文本
【发布时间】:2011-08-30 01:32:09
【问题描述】:

我目前正在尝试更改加载了表格单元触摸的子视图的后退按钮文本。然而,即使我尝试实现它的方式,它仍然在后退按钮中显示父母的标题。

我正在尝试将一个新值加载到 viewdidload 方法内的后退按钮中

UIBarButtonItem *myBarButtonItem = [[UIBarButtonItem alloc] init];
myBarButtonItem.title = @"Back";
self.navigationItem.backBarButtonItem = myBarButtonItem;
[myBarButtonItem release];

但它不起作用。

【问题讨论】:

标签: iphone ios uinavigationbar back-button


【解决方案1】:

您需要从以前的视图更改self.navigationItem.backBarButtonItem,而不是当前视图(我知道,这似乎有点不合逻辑)。例如,在您的表格视图中,您可以执行以下操作:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setTitle:@"My title"];
    UIBarButtonItem *boton = [[UIBarButtonItem alloc] initWithTitle:@"Custom back button text" style:UIBarButtonItemStyleBordered target:self action:@selector(mySelector:)];
    self.navigationItem.backBarButtonItem  = boton;
    [boton release];
}

【讨论】:

  • 如果他是用西班牙语写的就不行;)
【解决方案2】:

在您阅读并重新阅读并尝试使用每个设置之前,文档并不是那么清晰。
要更改默认后退按钮的标题,请在 viewDidLoad() 中添加此行

self.navigationController.navigationBar.topItem.title = @"Your Label";

如果您希望按钮不可见 - 请将值设置为 @"" 空字符串。

【讨论】:

  • 这是一个 hack,但如果你在返回时再次重置以前的 nib 的标题,它会起作用
  • 投反对票。考虑到其他选项,这不应被视为可行的解决方案。如果我们无法控制后退按钮的行为,那么这将是一个可以接受的 hack,但仍然是 hack。
  • TopItem 并不总是 BackButton 在我的一个案例中,TopItem 是视图标题
【解决方案3】:

好吧想通了,我在父视图 tableView:didSelectRowAtIndexPath: 方法中发布了这段代码。这就是我的用户可以选择的多个表格单元格的外观。希望这会有所帮助。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    if (indexPath.section == 0) { //--- picks (first) section

     ChildViewController *childViewController = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:childViewController animated:YES];
    //--- this sets the back button to "Back" every time you load the child view.
     self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStyleBordered target:nil action:nil] autorelease];

        if(indexPath.row == 0) { //--- picks row
            childViewController.title = @"Bike";
        }
        if(indexPath.row == 1) {
            childViewController.title = @"Model";
        }
        [vehicleSearchResponseTableViewController release];
    }


}

【讨论】:

  • 如果堆栈上有多个视图控制器,这是唯一有效的解决方案。谢谢。
【解决方案4】:

使用 Xcode 5 更改后退按钮名称的最佳方法是在返回按钮将返回到的视图控制器上的导航项的 IB 中编辑后退按钮字段。例如,如果您有一个转到详细屏幕的 TableViewController 列表,请更改列表 TableViewController 的导航项(在 IB 中)上的后退按钮以更改详细屏幕显示的后退按钮名称。

【讨论】:

  • 这是您想要的方式。谢谢彼得。
【解决方案5】:

它不会按照你想要的方式工作。导航按钮将始终具有上一个视图的标题。你可以做什么 - 在推送新视图之前更改第一个视图的标题。这是我唯一能找到解决相同问题的方法。

【讨论】:

  • 然后当你回去时,你必须改回你的标题。如果这是唯一的可能性,这是一个可怕的解决方案。手指交叉还有另一种方法。
【解决方案6】:

到目前为止,您的代码看起来还不错。

这段代码是在

之前执行的吗
[super viewDidLoad];

陈述(错误)还是陈述之后(好)?

【讨论】:

    【解决方案7】:

    viewDidLoad 之后

    self.navigationController!.navigationBar.backItem?.title = "返回"

    【讨论】:

      【解决方案8】:

      我的建议是为父母页面标题栏添加一个单独的标签。 对我来说工作得很好。

      let titleLabel = UILabel(frame: CGRect(x: (view.frame.width * (3/8)), y: 0, width: (view.frame.width * 0.25 ), height:30))
              titleLabel.text = "Title"
              titleLabel.textAlignment = .center
              titleLabel.textColor = UIColor.white
              titleLabel.font = UIFont.systemFont(ofSize: 20)
              navigationItem.titleView = titleLabel 
      

      【讨论】:

        【解决方案9】:

        This article 应该做你想做的事。

        来自作者:

        正如您在上面看到的,您需要做的就是设置控制器的leftBarButtonItem,它将隐藏后退按钮。选择器 handleBack 现在处理返回事件,然后您需要手动将视图控制器从 UINavigationController 的堆栈中弹出。您可以在其中实现任何您自己的代码,甚至阻止离开页面。

        【讨论】:

          【解决方案10】:

          这样做的一个好方法是在调用子视图之前在父视图控制器中设置后退按钮的标题,如下所示:

          [self.navigationItem.backBarButtonItem setTitle:@"Your Custom Title"];
          

          这个标题将被放置在子视图的后退按钮中。重要的一点是这个标题在子视图中用作父视图的后退按钮。

          【讨论】:

          • 根据你的解释,你的意思是不是 [self.navigationItem setTitle:@"..."] 或者只是 'self.title = @"..."'?
          • 默认 self.navigationItem.backBarButtonItem 为 nil,因此您无法使用此更改后退按钮仪式。
          猜你喜欢
          • 2014-06-01
          • 2011-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-24
          • 1970-01-01
          • 2012-05-01
          • 2023-04-01
          相关资源
          最近更新 更多