Как скрыть кнопку "Назад" в UINavigationController?
знаете ли вы, как скрыть кнопку "Назад" в UINavigationController?
Кроме того, как показать его обратно, но я думаю, что это очень похоже на его скрытие...
Так же, как почтовое приложение делает на iPhone, когда вы нажимаете "редактировать" при просмотре электронной почты.
14 ответов:
Я только что узнал ответ, используйте этот контроллер:
[self.navigationItem setHidesBackButton:YES animated:YES];и восстановить его:
[self.navigationItem setHidesBackButton:NO animated:YES];--
[обновление]
Swift 3.0:
self.navigationItem.setHidesBackButton(true, animated:true)
в дополнение к удалению кнопки "назад" (используя уже рекомендованные методы), не забывайте, что пользователь все еще может "всплывать" на предыдущий экран с помощью жеста влево-вправо в iOS 7 и более поздних версиях.
чтобы отключить это (при необходимости), реализуйте следующее (например, в viewDidLoad):
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) self.navigationController.interactivePopGestureRecognizer.enabled = NO;
для скрытия и отображения кнопки "Назад" условно можно использовать следующий код:
-(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 такие случаи, как: когда вы обновляете массив следующего класса в предыдущий класс, а затем проверяете условие в следующий класс, как указано выше.
просто чтобы уточнить существующие ответы: the
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];когда код заканчивается, вид контролируется
newVCтеперь должен отображаться, и кнопка "назад" не должна быть видна.
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
sethidesbackbutton не работает для меня по какой-то причине
я использовал этот способ ->
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)]] ;
всегда используйте документацию Apple для простых вопросов они более простые и легкие:)
вот синтаксис для Swift 3.0:
self.navigationItem.setHidesBackButton(true, animated:true)ссылка
в моем случае у меня было несколько проблем с текущей ответов:
- внутри viewDidLoad / viewWillAppear только значок назад был скрыт и строка "назад" была неактивна, но все еще видна
- внутри viewDidAppear кнопка назад исчезла...но я не хотел, чтобы пользователь видел его вообще
Итак, решение, которое, наконец, сработало для меня:
- (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { [self.navigationItem setHidesBackButton:YES animated:NO]; } return self; }
решение, предложенное Зораном Симичем, по какой-то причине не сработало для меня.
однако этот код работал:
MyController* controller = [[MyController alloc] init]; NSArray* array = [[[NSArray alloc] initWithObjects:controller, nil] autorelease]; [self.navigationController setViewControllers:array animated:NO]; [controller release];очевидно, вам придется манипулировать NSArray на свой вкус, чтобы заставить его работать на вас. Надеюсь, что это кому-то поможет :)
в моем подклассе 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]; }
это скрывает кнопку "назад" и заменяет ее кнопкой "Добавить" в 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.
Как правило, вы должны использовать API Apple per-ViewController, как описано много раз уже на этой странице, но иногда вам нужно немедленно контролировать кнопку "Назад".
следующий код скрывает кнопку Назад и гарантирует, что обнаружение столкновения крана не происходит в скрытой области кнопки.
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
Comments