Как скрыть кнопку "назад" в UINavigationController?

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

Как и приложение для почты на iPhone, когда вы нажимаете "Редактировать" при просмотре писем.

Ответ 1

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

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

И восстановить это:

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

-

[ОБНОВИТЬ]

Swift 3.0:

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

Ответ 2

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

[self.navigationItem setHidesBackButton:YES];

Ответ 3

В дополнение к удалению кнопки "Назад" (с использованием уже рекомендованных методов) не забудьте, что пользователь все еще может "поп" на предыдущем экране с жестом салфетки слева направо в iOS 7 и более поздних версиях.

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

sethidesbackbutton почему-то не работал у меня

Я использовал этот путь →

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

Ответ 9

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

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

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

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

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

    return self;
}

Ответ 10

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

Этот код действительно работал:

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

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

[controller release];

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

Ответ 11

В моем подклассе 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];
}

Ответ 12

Это скрывает кнопку "Назад" и заменяет ее кнопкой добавления в 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
        }
    }
}

Ответ 13

Swift 3.

Как правило, вы должны использовать API Apple per-ViewController, как описано много раз уже на этой странице, но иногда вам нужно немедленно контролировать кнопку "Назад".

Следующий код скрывает кнопку "Назад" и гарантирует, что обнаружение столкновения крана не происходит в области скрытых кнопок.

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

Ответ 14

Это скрывает кнопку "Назад"

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


navigationItem.leftBarButtonItem = backBtn