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

你知道如何在 UINavigationController 中隐藏“后退”按钮吗? 还有,如何把它展示回来但我想这和把它藏起来很相似。

就像 iPhone 上的邮件应用程序在查看邮件时点击“编辑”一样。

88045 次浏览

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

[self.navigationItem setHidesBackButton:YES animated:YES];

为了恢复它:

[self.navigationItem setHidesBackButton:NO animated:YES];

--

[更新]

Swift 3.0:

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

为了隐藏和显示后退按钮,您可以使用以下代码:

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

注意: 在某些情况下,必须将其放在 viewDidAppear 方法中,而不是 viewWillAppear 例如: 当你将下一个类的数组更新到上一个类中,然后像上面一样将条件检入到下一个类中。

在我的 UIViewController 子类中,我有这样一个方法:

-(void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated: animated];


// hide back button in edit mode
[self.navigationItem setHidesBackButton:editing animated:YES];
}

Zoran Simic 提出的解决方案由于某些原因对我不起作用。

然而,这个代码确实有效:

MyController* controller   =   [[MyController alloc]  init];
NSArray* array             =   [[[NSArray alloc] initWithObjects:controller, nil] autorelease];


[self.navigationController setViewControllers:array animated:NO];


[controller release];

显然,您必须根据自己的喜好操作 NSArray 才能让它为您工作。 希望对某人有所帮助:)

添加此代码

[self.navigationItem setHidesBackButton:YES];

除了移除后退按钮(使用已经推荐的方法) ,不要忘记用户仍然可以在 iOS7或更高版本中通过左向右滑动手势“弹出”到前一个屏幕。

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

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
self.navigationController.interactivePopGestureRecognizer.enabled = NO;

由于某些原因,sethidesbackton 对我不起作用

我用这种方式->

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

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

换句话说,假设我有一个名为 myNavControllerUINavigationController。我想在上面添加一个新的视图,当我这样做的时候,我不想再显示后退按钮。我可以这样做:

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];

当代码完成时,由 newVC控制的视图现在应该显示出来,并且应该看不到任何后退按钮。

就我而言,我对当前的答案几乎没有异议:

  • 在 viewDidLoad/viewWillAppear 中,只有 Back 图标被隐藏,字符串“ Back”不活动,但仍然可见
  • 返回按钮消失了... 但是我根本不想让用户看到它

所以最终对我有效的解决办法是:

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


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


return self;
}

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

对于简单的问题,始终使用苹果文档,它们更直观、更轻量级:)

以下是 Swift 3.0的语法:

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

参考文献

Https://developer.apple.com/reference/uikit/uinavigationitem#//apple_ref/occ/instm/uinavigationitem/sethidesbackbutton:animated :

这会隐藏后退按钮,并在 Swift 中用一个添加按钮替换它:

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


// This hides the back button while in editing mode, which makes room for an add item button
self.navigationItem.setHidesBackButton(editing, animated: animated)


if editing {
// This adds the add item button
let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
// Use the animated setter for the left button so that add button fades in while the back button fades out
self.navigationItem.setLeftBarButton(addButton, animated: animated)
self.enableBackGesture(enabled: false)
} else {
// This removes the add item button
self.navigationItem.setLeftBarButton(nil, animated: animated)
self.enableBackGesture(enabled: true)
}
}


func enableBackGesture(enabled: Bool) {
// In addition to removing the back button and adding the add item button while in edit mode, the user can still exit to the previous screen with a left-to-right swipe gesture in iOS 7 and later. This code disables this action while in edit mode.
if let navigationController = self.navigationController {
if let interactivePopGestureRecognizer = navigationController.interactivePopGestureRecognizer {
interactivePopGestureRecognizer.isEnabled = enabled
}
}
}

Swift 3.

一般来说,您应该按照本页面已经多次描述的那样使用 Apple 的 per-ViewController API,但有时您需要立即控制 Back 按钮。

下面的代码隐藏了后退按钮,并确保在隐藏按钮区域不会出现点击碰撞侦测。

let emptyView = UIView(frame: .zero)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: emptyView)

这里隐藏了后退按钮

let backBtn = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: navigationController, action: nil)




navigationItem.leftBarButtonItem = backBtn