如何在UINavigationController中隐藏"后退"按钮?

Zor*_*mic 156 iphone uinavigationcontroller ios

你知道如何隐藏UINavigationController中的"后退"按钮吗?另外,如何展示它,但我猜这与隐藏它非常相似......

就像邮件应用程序在查看电子邮件时点击"编辑"一样在iPhone上执行.

Zor*_*mic 308

我刚刚找到答案,在控制器中使用这个:

[self.navigationItem setHidesBackButton:YES animated:YES];
Run Code Online (Sandbox Code Playgroud)

并恢复它:

[self.navigationItem setHidesBackButton:NO animated:YES];
Run Code Online (Sandbox Code Playgroud)

-

[UPDATE]

Swift 3.0:

self.navigationItem.setHidesBackButton(true, animated:true)
Run Code Online (Sandbox Code Playgroud)

  • 还要从我的错误中学习:你必须在将navigationItem推入navigationController之前调用`setHidesBackButton:`. (17认同)
  • 最好的事件是`viewWillAppear:动画`隐藏和`viewWillDisappear:animated`来恢复它. (2认同)

小智 27

添加此代码

[self.navigationItem setHidesBackButton:YES];
Run Code Online (Sandbox Code Playgroud)


mat*_*123 22

除了删除后退按钮(使用已推荐的方法)之外,请不要忘记用户仍然可以在iOS 7及更高版本中使用从左到右的轻扫手势"弹出"到上一个屏幕.

要禁用它(在适当的时候),请实现以下(例如在viewDidLoad中):

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
     self.navigationController.interactivePopGestureRecognizer.enabled = NO;
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 17

只是为了澄清现有的答案:该hidesBackButton属性是正确的答案,但在许多答案中并不清楚self所指的是什么.基本上你应该self.navigationItem.hidesBackButton = YES在视图控制器中设置即将被推(或刚被推)到UINavigationController.

换句话说,说我有一个UINavigationController名字myNavController.我想在其上添加一个新视图,当我这样做时,我不希望后退按钮再显示.我可以这样做:

UIViewController *newVC = [[UIViewController alloc] init];
//presumably would do some stuff here to set up the new view controller
newVC.navigationItem.hidesBackButton = YES;
[myNavController pushViewController:newVC animated:YES];
Run Code Online (Sandbox Code Playgroud)

代码完成后,newVC现在应该显示受控制的视图,并且不应显示后退按钮.


San*_* SM 16

要有条件地隐藏和显示"后退"按钮,您可以使用以下代码:

-(void)viewDidAppear:(BOOL)animated
{
    if ([tempAry count]==0)
    {
        [self.navigationItem setHidesBackButton:YES animated:YES];
    }
    else
    {
        [self.navigationItem setHidesBackButton:NO animated:YES];
    }
    [super viewDidAppear:animated];
} 
Run Code Online (Sandbox Code Playgroud)

注意:在某些情况下,您必须将它放在viewDidAppear方法而不是viewWillAppear中,例如:当您将下一个类的数组更新为上一个类,然后将条件检查到上一个类时.


Vin*_*shi 11

Swift iOS(我用过以下)

// hide back button
        self.navigationItem.setHidesBackButton(true, animated: false)

// pgrm mark ----- ------

    // hide the back button for this view controller

    override func setEditing(editing: Bool, animated: Bool) {
        super.setEditing(editing, animated: animated)

        self.navigationItem.setHidesBackButton(editing, animated: animated)

    }// end setEditing
Run Code Online (Sandbox Code Playgroud)


M.O*_*man 10

由于某种原因,sethidesbackbutton不适合我

我用这种方式 - >

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)]] ;
Run Code Online (Sandbox Code Playgroud)


Muh*_*fan 7

始终使用Apple文档解决简单问题,它们更直接,更轻便:)

以下是Swift 3.0的语法:

self.navigationItem.setHidesBackButton(true, animated:true)
Run Code Online (Sandbox Code Playgroud)

参考

https://developer.apple.com/reference/uikit/uinavigationitem#//apple_ref/occ/instm/UINavigationItem/setHidesBackButton:animated:


mic*_*c3r 6

在我的情况下,我对当前答案几乎没有问题:

  • 在viewDidLoad/viewWillAppear里面只隐藏了后面的图标,字符串"Back"处于非活动状态但仍然可见
  • 在viewDidAppear中,后退按钮消失了...但我根本不希望用户看到它

所以最终对我有用的解决方案是:

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];

    if (self) {
        [self.navigationItem setHidesBackButton:YES animated:NO];
    }

    return self;
}
Run Code Online (Sandbox Code Playgroud)