UIBarButtonItems не работает - PullRequest
0 голосов
/ 31 мая 2018

У меня есть 4 ViewControllers, A, B, C и D.

  • A может переходить к B, C и D.
  • B может переходить к Cи D
  • C может перейти к D

Показано (грубо) в виде графика:

A - B - C
 \  |  /
    D

A является корнем UINavigationController, так кака также начальный ViewController.По какой-то странной причине, всякий раз, когда я переключаюсь с B или C на D, UIBarButtonItems из D вообще не работает.Я добавляю их в панель навигации программно:

    let settingsButton = UIButton(type: .custom)
    settingsButton.frame = CGRect(x: 0, y: 0, width: 35, height: 35)
    settingsButton.contentMode = .scaleAspectFit
    settingsButton.setImage(UIImage(named: "settings-black.png"), for: .normal)
    settingsButton.addTarget(self, action: #selector(settingsPressed), for: .touchUpInside)
    settingsButton.imageEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 10)
    if #available(iOS 9.0, *) {
        settingsButton.widthAnchor.constraint(equalToConstant: 35).isActive = true
        settingsButton.heightAnchor.constraint(equalToConstant: 35).isActive = true
    }
    navigationItem.setLeftBarButton = UIBarButtonItem(customView: settingsButton)

В Main.storyboard у всех вышеупомянутых ViewControllers есть NavigationItem.Все segues между этими контроллерами являются Show (push) segues.Я заметил, что функциональность UIBarButtonItem из D работает, когда я изменяю сегменты между B и D, а также C и D для представления модально, но это просто обходной путь.

1 Ответ

0 голосов
/ 31 мая 2018

Верный магии StackOverflow, я нашел ответ в процессе сглаживания вопроса.

Проблема заключалась в этой маленькой мошеннической строке кода:

navigationController?.isNavigationBarHidden = false

При выполненииработая с навигационной панелью в моем приложении, я переключился со скрытой навигационной панели на полупрозрачную.Оставление этого кода означало, что полупрозрачная навигационная панель была поверх UINavigationBar, созданного в D (контейнер ViewController с его собственным программно созданным экземпляром UINavigationController как дочерний vc), таким образом блокируя все мои пользовательские вводы.

Надеюсь, это может спасти кого-то еще от борьбы!

Удачного кодирования!:)

...