как изменить функцию навигации назад элемента, обратно в rootView

У меня проблема.

Я использую show(vc)для представления контроллера вида.

vc1 — > vc2 — > > vc3

Я хочу перенаправить пользователя с vc1, когда пользователь нажимает на кнопку back на vc3, чтобы добиться того, что я использую ниже упомянутый код.

 override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationItem.hidesBackButton = true
    let newBackButton = UIBarButtonItem(title: "<", style: UIBarButtonItemStyle.plain, target: self, action: #selector(backToRoot(sender:)))
    self.navigationItem.leftBarButtonItem = newBackButton 
}

func backToRoot(sender: UIBarButtonItem) {

    _ = self.navigationController?.popToRootViewController(animated: true)
}

Мне нужно изображение по умолчанию кнопки back, а не customized button.

Есть ли способ сделать это?

1 ответ

  1. Я сделал это только сегодня. Я не нашел способа изменить действие кнопки возврата системы. Для того, чтобы выглядеть как системный стиль, я рисую такую же картину(снимок симулятора и изменение в фотомагазине). Код выглядит следующим образом:

    let button: UIButton = UIButton(type: .system)
    

    размер высоты по умолчанию 30, ширина все, что угодно вы устанавливаете

    button.frame = CGRect(x: 0, y: 0, width: 80, height: 30)
    button.setImage(UIImage(named: "BackButton"), for: .normal)
    

    по умолчанию используется следующий шрифт:

    button.setTitle("Back", for: .normal)
    button.titleLabel?.font = UIFont(name: "AvenirNext", size: 15)
    

    Это трюк, вам нужно выяснить ту же позицию с системой, следующий мой результат, я корректировал много раз. Я надеюсь, что вы могли бы использовать, но я думаю, что вам нужно найти свой собственный размер

    button.imageEdgeInsets = UIEdgeInsetsMake(0, -43, 0, 0)
    button.titleEdgeInsets = UIEdgeInsetsMake(0, -33, 0, 0)
    
    button.addTarget(target, action: action, for: .touchUpInside)
    let barButton = UIBarButtonItem(customView: button)