如何更改uinavigationbar后退按钮文本

时间:2011-08-30 01:32:09

标签: iphone ios uinavigationbar back-button

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

我正在尝试在viewdidload方法中的后退按钮中加载一个新值,如此

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

然而它不起作用。

10 个答案:

答案 0 :(得分:30)

您需要从之前的视图更改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];
}

答案 1 :(得分:26)

在您阅读并重新阅读并使用每个设置之前,这是文档不太清晰的地方 要更改默认后退按钮的标题,请在viewDidLoad()

中添加此行
self.navigationController.navigationBar.topItem.title = @"Your Label";

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

答案 2 :(得分:9)

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

- (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];
    }


}

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

到目前为止,您的代码看起来很好。

此代码是否在

之前执行
[super viewDidLoad];

陈述(错误)或之后(好)?

答案 6 :(得分:0)

viewDidLoad

之后

self.navigationController!.navigationBar.backItem?.title =“Back”

答案 7 :(得分:0)

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

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 

答案 8 :(得分:-1)

This article应该做你想做的事。

来自作者:

  

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

答案 9 :(得分:-3)

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

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

此标题将放在子视图的后退按钮中。到此处的重点是这个标题在子视图中用作父视图的后退按钮。