Как скрыть кнопку «назад» в UINavigationController? - PullRequest
153 голосов
/ 21 сентября 2009

Знаете ли вы, как скрыть кнопку «назад» в UINavigationController? Кроме того, как показать это обратно, но я думаю, это очень похоже на сокрытие этого ...

Так же, как почтовое приложение на iPhone, когда вы нажимаете «Редактировать» при просмотре электронной почты.

Ответы [ 14 ]

303 голосов
/ 21 сентября 2009

Я только что узнал ответ, в контроллере используйте это:

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

И восстановить его:

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

-

[UPDATE]

Swift 3.0:

self.navigationItem.setHidesBackButton(true, animated:true)
27 голосов
/ 06 апреля 2013

Добавить этот код

[self.navigationItem setHidesBackButton:YES];
22 голосов
/ 11 декабря 2013

Помимо удаления кнопки «назад» (с использованием уже рекомендованных методов), не забывайте, что пользователь все еще может «перейти» к предыдущему экрану жестом смахивания слева направо в iOS 7 и более поздних версиях.

Чтобы отключить это (при необходимости), реализуйте следующее (например, в viewDidLoad):

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
     self.navigationController.interactivePopGestureRecognizer.enabled = NO;
16 голосов
/ 07 сентября 2014

Просто для уточнения существующих ответов: свойство 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, и кнопка возврата не должна быть видимой.

16 голосов
/ 29 июля 2011

Для условного скрытия и отображения кнопки «Назад» вы можете использовать следующий код:

-(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 такие случаи, как: когда вы обновляете массив следующего класса в предыдущий класс, а затем проверяете условие в следующем классе, как указано выше.

11 голосов
/ 03 марта 2015

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
10 голосов
/ 02 февраля 2014

кнопка sethidesback по какой-то причине у меня не сработала

Я так и использовал ->

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)]] ;
7 голосов
/ 29 октября 2016

Всегда используйте документацию Apple для простых вопросов, они более простые и легкие:)

Вот синтаксис для Swift 3.0:

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

Ссылки

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

6 голосов
/ 19 января 2015

В моем случае у меня было несколько вопросов с текущими ответами:

  • внутри viewDidLoad / viewWillAppear только значок возврата был скрыт, а строка «Назад» была неактивной, но все еще видимой
  • inside viewDidAppear кнопка возврата исчезла ... но я не хотел, чтобы пользователь ее вообще видел

Итак, решение, которое наконец-то сработало для меня:

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

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

    return self;
}
3 голосов
/ 06 февраля 2013

Решение, предложенное Зораном Симичем, почему-то не сработало для меня.

Однако этот код работал:

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

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

[controller release];

Очевидно, вам придется манипулировать NSArray на свой вкус, чтобы он работал на вас. Надеюсь, это кому-нибудь поможет:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...