【发布时间】:2010-11-30 00:35:55
【问题描述】:
你知道如何在 UINavigationController 中隐藏“返回”按钮吗? 还有,怎么显示回来,不过我想这和隐藏很相似……
就像您在查看电子邮件时点击“编辑”时 iPhone 上的邮件应用程序一样。
【问题讨论】:
标签: ios iphone uinavigationcontroller
你知道如何在 UINavigationController 中隐藏“返回”按钮吗? 还有,怎么显示回来,不过我想这和隐藏很相似……
就像您在查看电子邮件时点击“编辑”时 iPhone 上的邮件应用程序一样。
【问题讨论】:
标签: ios iphone uinavigationcontroller
我刚刚找到答案,在控制器中使用这个:
[self.navigationItem setHidesBackButton:YES animated:YES];
然后恢复它:
[self.navigationItem setHidesBackButton:NO animated:YES];
--
[更新]
斯威夫特 3.0:
self.navigationItem.setHidesBackButton(true, animated:true)
【讨论】:
setHidesBackButton:。
viewWillAppear:animated 隐藏和 viewWillDisappear:animated 恢复它。
为了有条件地隐藏和显示后退按钮,您可以使用以下代码:
-(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];
【讨论】:
除了移除后退按钮(使用已经推荐的方法)之外,别忘了在 iOS 7 及更高版本中,用户仍然可以使用从左到右的滑动手势“弹出”到上一个屏幕。
要禁用它(在适当的时候),请执行以下操作(例如在 viewDidLoad 中):
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
【讨论】:
sethidesbackbutton 出于某种原因对我不起作用
我是这样用的->
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)]] ;
【讨论】:
只是为了澄清现有答案:hidesBackButton 属性是正确答案,但在许多答案中并不清楚self 指的是什么。基本上你应该在即将被推送(或刚刚被推送)到UINavigationController的视图控制器中设置self.navigationItem.hidesBackButton = YES。
换句话说,假设我有一个名为myNavController 的UINavigationController。我想在它上面放一个新视图,当我这样做时,我不想再显示后退按钮。我可以这样做:
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 控制的视图现在应该会显示出来,并且不会显示返回按钮。
【讨论】:
在我的情况下,我对当前答案的问题很少:
所以最终对我有用的解决方案是:
- (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
【讨论】:
对于简单的问题总是使用 Apple 文档,它们更直接、更轻量级 :)
以下是 Swift 3.0 的语法:
self.navigationItem.setHidesBackButton(true, animated:true)
参考
【讨论】:
这会隐藏后退按钮并用 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
}
}
}
【讨论】:
斯威夫特 3.
一般来说,您应该使用 Apple 的 per-ViewController API,如本页已多次描述的那样,但有时您需要立即控制后退按钮。
以下代码隐藏了后退按钮,并确保在隐藏按钮区域不会发生点击碰撞检测。
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
【讨论】: