Swift - Как скрыть кнопку возврата в элементе навигации?


103

Прямо сейчас у меня есть два контроллера представления. Моя проблема в том, что я не знаю, как скрыть кнопку «Назад» после перехода на второй контроллер представления. Большинство ссылок, которые я нашел, относятся к Objective-C. Как мне написать код на Swift?

Скрыть код кнопки возврата в Objective-C

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

Ответы:


367

Согласно документации на UINavigationItem:

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

30
язвительность - бесплатно.
Грег

58
Это может напугать вас @ Paulw11, но простой факт печатает «кнопку шкуры назад Swift» в Google и приходить сюда - как я только что сделал - это тонны быстрее , чем вспашки через пачку текста в официальной документации.
Мама Джозефа Бойса

4
В то время как имя кнопки «Назад» определяется в первом контроллере представления, может быть интересно заметить, что код, чтобы скрыть его, должен быть реализован во втором контроллере представления (тот, который показывает кнопку).
XLE_22

38

Если вы используете UITabBarController:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.tabBarController?.navigationItem.hidesBackButton = true
}

То же самое для меня, однако я хотел бы понять, почему. Кто-нибудь знает, в чем разница между принятым ответом и этим подходом? Единственное, о чем я могу думать, - это модель наследования и статическая версия панели навигации.
Гельмут Гранда,

1
@HelmutGranda Если вы заметили, что Бруно использует контроллер панели вкладок, разница в этом. В случае с принятыми ответами VC, вероятно, встроен в контроллер навигации.
cloudcal

@cloudcal Я не использую tabBar, но оба ответа работали. Оба они спрятали кнопку возврата. Я думал, что они будут вести себя по-другому, если viewController будет на экране, а затем я хотел скрыть кнопку «Назад». И снова они оба действовали одинаково. Я не смог найти между ними никакой разницы. Я говорю, что ответ Бруно неверен. Скорее для чистого navigationController это не имеет значения. Я не пробовал tabBarController
Дорогая

20

Swift

// remove left buttons (in case you added some)
 self.navigationItem.leftBarButtonItems = []
// hide the default back buttons
 self.navigationItem.hidesBackButton = true

Понятно, что navigationItem.hidesBackButton = true - правильный ответ. Если есть левые кнопки, что может иметь место, то это, безусловно, правильный ответ, и его следует рассматривать как более полный ответ.
truedat101

self.navigationItem.hidesBackButton = trueОн работает, как ожидалось.
Shahabuddin Vansiwala




0

Вот вариант ответа в

Swift 5

что вы можете использовать его из раскадровки:

// MARK: - Hiding Back Button

extension UINavigationItem {

    /// A Boolean value that determines whether the back button is hidden.
    ///
    /// When set to `true`, the back button is hidden when this navigation item
    /// is the top item. This is true regardless of the value in the
    /// `leftItemsSupplementBackButton` property. When set to `false`, the back button
    /// is shown if it is still present. (It can be replaced by values in either
    /// the `leftBarButtonItem` or `leftBarButtonItems` properties.) The default value is `false`.
    @IBInspectable var hideBackButton: Bool {
        get { hidesBackButton }
        set { hidesBackButton = newValue }
    }
}

Каждый элемент навигации контроллера представления будет иметь это новое свойство в верхней части инспектора атрибутов.


0

Это сработало для меня в Swift 5 как шарм, просто добавьте его в свой viewDidLoad ()

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

-4

введите описание изображения здесь

Перейдите в инспектор атрибутов и снимите флажок «Показать панель навигации, чтобы скрыть кнопку возврата».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.