Доступ к navigationItem.title из другого класса Swift - PullRequest
0 голосов
/ 18 января 2020

Как я могу получить доступ к заголовку внутри контроллера навигации из отдельного класса? Я встроил свой mainVC в контроллер навигации через раскадровку. Я могу получить доступ к названию из viewDidLoad из того же класса, как этот self.navigationItem.title = "MyTitle". Однако мне нужно получить доступ к заголовку из отдельного класса 'CustomNavigation, например:

class: CustomNavigation: UIViewController() {
   override func viewDidLoad(){
      super.viewDidLoad()

      func createCustomNav(){

         self.navigationItem.title = "MyTitle"
      }

   }

}

К сожалению, это не работает. Я также попробовал это:

func createCustomNav(){

   let nav = UINavigationBar()
   let title = UINavigationItem(title: "MyTitle")
   nav.setItems([title], animated: false)
   self.view.addSubview(nav)
}

Это тоже не работает. Я не получаю никаких ошибок.

Я создаю CustomNavigation внутри mainV C: var customNavigation = CustomNavigation()

Любая помощь будет очень признательна!

1 Ответ

0 голосов
/ 18 января 2020

Установите протокол, который описывает работу, которую вы хотите сделать.

protocol NavigationTitler {
    func updateTitle(with title: String)
}

Определите, как ваш класс будет использовать протокол.

class CustomNavigation: UINavigationController {
    var titleDelegate: NavigationTitler?
    func work() {
        if let del = titleDelegate {
            del.updateTitle(with: "Title from other object")
        }
    }
}

Реализуйте протокол (это для вашего mainVC).

class ViewController: UIViewController, NavigationTitler {
    var customNavigation: CustomNavigation?
    func updateTitle(with title: String) {
        self.navigationItem.title = title
    }
    func buildCustomController() {
        customNavigation = CustomNavigation()
        customNavigation!.titleDelegate = self
    }
}
...