无法设置self.navigationItem.backBarButtonItem

时间:2016-03-22 07:37:42

标签: ios objective-c iphone uibarbuttonitem uinavigationitem

我有一个名为TVC的TableViewController和一个单元格。当我点击单元格时,TableViewController会将新的ViewController(VC)推送到其导航控制器中。在这种情况下,我在TVC的[self.navigationItem.backBarButtonItem setTitle:@" "]功能中设置了viewDidLoad。但是在新推的ViewController VC中,后退按钮仍然有"后退"文本。谁能解释一下呢?

BTW,TableViewController TVC也被另一个视图控制器VC2推送。我在VC2的[self.navigationItem.backBarButtonItem setTitle:@" "]函数中设置了相同的函数viewDidLoad,并且正确隐藏了TVC中显示的后退按钮文本。

4 个答案:

答案 0 :(得分:2)

Bimala和Ted指出的是解决问题的两种方法。前者是设置自定义BackButtonItem,后者是简单地使用默认的BackButton。但是将屏幕标题设置为“”并不总是可以接受的。所以你可以选择在ViewWillDisappear方法中做同样的事情。

OBJ C:

-(void) viewWillDisappear:(BOOL)animated{
    self.navigationItem.title = @"";
    [super viewWillDisappear:animated];
}

(SWIFT):

override func viewWillDisappear(animated: Bool) {
    self.title = ""
    super.viewWillDisappear(true)
}

您也可以在ViewWillappear

中设置标题

OBJ C:

-(void)viewWillAppear:(BOOL)animated  {  
    [super viewWillAppear:animated];
    self.navigationItem.title = @"your title"; 
}

(SWIFT):

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true)
    self.title = "your title"
}

答案 1 :(得分:1)

这是因为后退按钮采用了前一个视图控制器的标题。如果没有设置,则默认为返回。因此,将TableViewController的名称设置为空字符串,如下所示:

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = ""
}

答案 2 :(得分:0)

我的榜样:

UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[leftView setBackgroundColor:[UIColor clearColor]];
UIButton *leftViewButton = [UIButton buttonWithType:UIButtonTypeCustom];
[leftViewButton setFrame:CGRectMake(0, 0, 30, 30)];
[leftView addSubview:leftViewButton];

[leftViewButton setImage:[UIImage imageNamed:@"NavigationBarButtonBackDefault"] forState:UIControlStateNormal];
[leftViewButton setImage:[UIImage imageNamed:@"NavigationBarButtonBackPressed"] forState:UIControlStateHighlighted];

UIBarButtonItem *barButtonItemLeft = [[UIBarButtonItem alloc] initWithCustomView:leftView];
self.navigationItem.leftBarButtonItem = barButtonItemLeft;

来自文档:

  

如果后退按钮的标题太长而无法放入导航栏上的可用空间,则导航栏可以替换字符串“Back”代替按钮的原始标题。仅当前一个视图控制器提供后退按钮时,导航栏才会执行此操作。如果新的顶级视图控制器具有自定义左栏按钮项 - 其导航项的leftBarButtonItems或leftBarButtonItem属性中的对象 - 导航栏不会更改按钮标题。

答案 3 :(得分:0)

如果您只想隐藏“返回”按钮,请尝试:

self.navigationItem.hidesBackButton = YES;

self.navigationController.navigationBar.topItem.hidesBackButton = YES;

如果要设置自定义后退按钮,请使用:

UIBarButtonItem *barButtonItem = [ [UIBarButtonItem alloc] initWithTitle: @"Custom"
                                                                   style: UIBarButtonItemStylePlain
                                                                  target: nil action: nil];
self.navigationController.navigationBar.topItem.backBarButtonItem = barButtonItem;