Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法设置self.navigationItem.backBarButtonItem_Ios_Objective C_Iphone_Uibarbuttonitem_Uinavigationitem - Fatal编程技术网

Ios 无法设置self.navigationItem.backBarButtonItem

Ios 无法设置self.navigationItem.backBarButtonItem,ios,objective-c,iphone,uibarbuttonitem,uinavigationitem,Ios,Objective C,Iphone,Uibarbuttonitem,Uinavigationitem,我有一个名为TVC的TableViewController,其中有一个单元格。当我点击单元格时,TableViewController会将一个新的ViewController(VC)推送到它的导航控制器中。在本例中,我在TVC的viewDidLoad函数中设置了[self.navigationItem.BackBarButtonim setTitle:@”“]。但是在新按下的ViewControllerVC中,后退按钮仍然有“后退”文本。有人能解释一下吗 顺便说一句,TableViewContr

我有一个名为TVC的
TableViewController
,其中有一个单元格。当我点击单元格时,
TableViewController
会将一个新的
ViewController
(VC)推送到它的导航控制器中。在本例中,我在TVC的
viewDidLoad
函数中设置了
[self.navigationItem.BackBarButtonim setTitle:@”“]
。但是在新按下的
ViewController
VC中,后退按钮仍然有“后退”文本。有人能解释一下吗


顺便说一句,
TableViewController
TVC也由另一个视图控制器VC2推动。我在VC2的
viewDidLoad
功能中设置了相同的功能
[self.navigationItem.BackBarButtonim setTitle:@”“]
,TVC中显示的后退按钮文本被正确隐藏。

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

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

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

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = ""
}
这是我的例子:

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;
从文件:

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

这是我的例子:

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;
从文件:

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


比马拉和特德指出了处理这个问题的两种方式。前者是设置自定义BackButton,后者只是使用默认BackButton。但将屏幕标题设置为“”可能并不总是可以接受的。因此,您可以选择在ViewWillEnglish方法中执行相同的操作

OBJ C:

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

override func viewWillDisappear(animated: Bool) {
    self.title = ""
    super.viewWillDisappear(true)
}
override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true)
    self.title = "your title"
}
您还可以在ViewWillDisplay中重新设置标题

OBJ C:

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

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

比马拉和特德指出了处理这个问题的两种方式。前者是设置自定义BackButton,后者只是使用默认BackButton。但将屏幕标题设置为“”可能并不总是可以接受的。因此,您可以选择在ViewWillEnglish方法中执行相同的操作

OBJ C:

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

override func viewWillDisappear(animated: Bool) {
    self.title = ""
    super.viewWillDisappear(true)
}
override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true)
    self.title = "your title"
}
您还可以在ViewWillDisplay中重新设置标题

OBJ C:

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

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

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

self.navigationItem.hidesBackButton = YES;

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

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

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

self.navigationItem.hidesBackButton = YES;

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

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

如果在“VC”的
viewdiload:
方法中隐藏“后退”按钮,我会设置backbuttonItem的外观(将文本颜色设置为与背景栏相同,并将字体设置为非常小),它适用于所有backbuttonItem。这是隐藏backbutton文本的一种简单方法。如果在“VC”的
viewDidLoad:
方法中隐藏backbutton按钮,我会设置backbutton图标的外观(将文本颜色设置为与背景栏相同,并将字体设置为非常小),它适用于所有backbutton图标。这是一种隐藏backbutton文本的简单方法。是的,我也考虑过这一点。但是如果我从子视图返回,我仍然需要重置表视图的标题。是的,我也考虑过这个问题。但是如果我从子视图返回,我仍然需要重置表视图的标题。谢谢。这是有道理的。我还找到了另一种方法通过设置Backbuttonite外观来实现这一点。谢谢。这是有道理的。我还找到了通过设置Backbuttonite外观来实现这一点的另一种方法。