self.navigationItem.backBarButtonItem 无法设置
Posted
技术标签:
【中文标题】self.navigationItem.backBarButtonItem 无法设置【英文标题】:self.navigationItem.backBarButtonItem cannot be set 【发布时间】:2016-03-22 07:37:42 【问题描述】:我有一个名为 TVC 的 TableViewController
和一个单元格。当我单击单元格时,TableViewController
会将一个新的ViewController
(VC) 推送到其导航控制器中。在这种情况下,我在 TVC 的viewDidLoad
函数中设置了[self.navigationItem.backBarButtonItem setTitle:@" "]
。但是在新推的ViewController
VC中,后退按钮还是有“后退”的文字。谁能解释一下?
顺便说一句,TableViewController
TVC 也被另一个视图控制器 VC2 推送。我在VC2的viewDidLoad
函数中设置了同样的函数[self.navigationItem.backBarButtonItem setTitle:@" "]
,TVC中显示的后退按钮文字被正确隐藏了。
【问题讨论】:
如果你在“VC”的viewDidLoad:
方法中隐藏后退按钮?
我设置了backbuttonItem的外观(将文本颜色设置为与背景栏相同,并将字体设置为非常小),它适用于所有backbuttonItem。这是隐藏后退按钮文本的简单方法。
【参考方案1】:
Bimala 和 Ted 指出的是解决问题的两种方法。前者是设置一个自定义的BackButtonItem,后者是简单地使用默认的BackButton。但是将屏幕标题设置为“”可能并不总是可以接受的。所以你可以选择在 ViewWillDisappear 方法中做同样的事情。
OBJ C:
-(void) viewWillDisappear:(BOOL)animated
self.navigationItem.title = @"";
[super viewWillDisappear:animated];
斯威夫特:
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";
斯威夫特:
override func viewWillAppear(animated: Bool)
super.viewWillAppear(true)
self.title = "your title"
【讨论】:
谢谢。这是有道理的。我还找到了另一种通过设置 backbuttonItem 外观来实现此目的的方法。【参考方案2】:这是因为后退按钮采用了前一个视图控制器的标题。如果没有设置,则默认为后退。所以将 TableViewController 的名称设置为空字符串如下:
override func viewDidLoad()
super.viewDidLoad()
self.navigationItem.title = ""
【讨论】:
是的,我也想过这个问题。但是如果我从子视图返回,我仍然需要重置表格视图的标题。【参考方案3】:这是我的例子:
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 属性中的一个对象),则导航栏不会更改按钮标题。
【讨论】:
【参考方案4】:如果你只是想隐藏后退按钮,那么试试:
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;
【讨论】:
以上是关于self.navigationItem.backBarButtonItem 无法设置的主要内容,如果未能解决你的问题,请参考以下文章