Как сдвинуть назад пользовательскую кнопку в навигационном контроллере на swift 5 - PullRequest
0 голосов
/ 02 октября 2019

У меня проблема с работой на интерфейсе. Я использовал navigationController для перемещения экрана.

Но я не хотел использовать базовую кнопку «Назад», поэтому я спрятал основную кнопку «Назад», добавил панель навигации к раскадровке,

и добавил элементы для создания кнопки «Назад». Однако экран не перемещается на предыдущий экран. Как мне перейти на предыдущий экран?

Базовая кнопка back // Я скрываю это сейчас.

back

Я хочу использовать созданную мной кнопку возврата.

enter image description here

Команда «Назад» для элементов кнопки «Назад».

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        self.navigationController?.setNavigationBarHidden(true, animated: animated)
    }

    @IBAction func backButton(_ sender: UIBarButtonItem) {
        self.dismiss(animated: false, completion: nil) // Did not worked!
    }

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

Ответы [ 2 ]

1 голос
/ 02 октября 2019

Вы можете настроить кнопку возврата с помощью следующего кода

    let buttonView = UIView(frame: CGRect(x: 0, y: 0, width: 25, height: 25))


let buttonImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 25, height: 25))
        buttonImageView.contentMode = .scaleAspectFit
        buttonImageView.image = UIImage(named: "back_button")

        let btnLogo = UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
        btnLogo.setTitle("", for: .normal)
        btnLogo.backgroundColor = UIColor.clear
        btnLogo.layer.masksToBounds = true
        btnLogo.addTarget(self, action: #selector(backButton), for: .touchUpInside)
        buttonView.addSubview(buttonImageView)
        buttonView.addSubview(btnLogo)

        let barButton = UIBarButtonItem(customView: buttonView)
        self.navigationItem.leftBarButtonItem = barButton

, если вы используете панель навигации, вы должны использовать navigationController.popViewController вместо метода dismiss

1 голос
/ 02 октября 2019

Я использую это в проекте для той же ситуации:

UIApplication.shared.keyWindow?.rootViewController?.dismiss(animated: false, completion: nil)

это можно использовать после устаревания iOS 13 keyWindow:

let keyW = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
keyW?.rootViewController?.dismiss(animated: false, completion: nil)

Это также можно использовать:

self.navigationController?.popViewController(animated: false)

или

self.navigationController?.popToRootViewController(animated: false)

О кнопке:

Почему бы просто не использовать кнопку навигации, создавая эту иерархию в раскадровке:

enter image description here

Затем просто измените изображение для btn на свое собственное изображение (я использую burger1.png) следующим образом:

enter image description here

...