2011-08-30 69 views
19

我目前正在尝试更改已加载tablecell触摸的子视图的后退按钮文本。但即使我试图实现它的方式,它仍然显示后退按钮中的父母标题。如何更改uinavigationbar后退按钮文本

我想但是它不工作到一个新的数值装入后退按钮viewDidLoad方法里,像这样

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

+0

这是在主线程上执行吗? –

+0

老实说,我不确定,我不确定有关ios中的线程。如果这有助于回答您的问题,我不会创建线程以我的知识。 –

+1

重复的问题。看到这个答案:http://stackoverflow.com/a/4291832/1627732 – Yoga

回答

0

你的代码目前看起来很好。

此代码的

[super viewDidLoad]; 

声明(错误的)前执行或之后(好)?

+0

我之后正在执行它。 –

1

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

+1

然后当你回去时你必须改回你的头衔..这是一个可怕的解决方案,如果它的唯一可能性..手指越过另一种方式。 –

9

好吧,算了一下,我发布了这个代码在父视图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]; 
    } 


} 
+0

如果您在堆栈中有多个视图控制器,这是唯一真正有效的解决方案。谢谢。 – Winston

-1

This article应该做你想做的。

从笔者:

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

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]; 
} 
+0

如果他是用西班牙文写的话,则不需要;) – Steven07

24

在这里,直到您已经阅读并重新阅读和玩各设置的文档不是那么清楚。
要更改默认的标题后退按钮如果您希望按钮是不可见添加此行viewDidLoad()

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

- 然后将值设置为@""空字符串。

+2

这是一种黑客攻击,但是如果您在回去之前重新设置前一个笔尖的标题,它会起作用 –

+0

Downvoted。考虑到其他选择,这不应该被认为是一个可行的解决方案。如果我们由于缺乏对后退按钮行为的控制而面临这种情况,那么这将是一个可接受的黑客行为,但仍然是一种黑客行为。 –

+0

TopItem并不总是一个BackButton在我的情况下TopItem是查看标题 –

-3

一个好办法做到这一点是调用子这样之前设置在父视图控制器返回按钮的标题:

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

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

+0

根据你的解释,你不是指[self.navigationItem setTitle:@“...”],甚至只是'self.title = @“...”'? –

+1

默认情况下,self.navigationItem.backBarButtonItem为零,因此您无法使用此更改后退按钮仪式。 – Peter

2

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

+0

这是你想要做的方式。谢谢彼得。 – JVillella

0

viewDidLoad中

self.navigationController!之后.navigationBar.backItem?.title伪= “后退”

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 
相关问题