如何从任何 ViewController 访问 CustomNavigationController 的方法?

How to access methods of CustomNavigationController from any ViewController?

我创建了 CustomNavigationController 并添加了一些常用方法来向其添加 UIBarButtonItems。现在我想从我的各种 viewController 中调用这些方法。

所以我的问题是 - 如何从任何其他 viewController.[=13 调用属于 customNavigationController 的方法=]

我可以通过以下方式在 objectiveC 中实现此目的:

[(CustomNavigationController *)self.navigationController addLogoutButtonWithVC:self actionLogoutHandler:@selector(actionLogoutHandler)];

其中“addLogoutButtonWithVC”是属于 CustomNavigationController 的方法。

我在 Swift 的上面几行中做了一些尝试,但没有成功。

[注意 : 当嵌入时,我已经在情节提要中用 CustomNavigationController 替换了 NavigationController,所以所有的 navigationController 现在都只指向 CustomNavigationController]

"更新:CustomNavigationController 中的 addLogoutButtonWithViewController 和 actionLogoutHandler 声明"

func addLogoutButtonWithViewController(viewCont : UIViewController , selLogout : Selector)  {
    currentController = viewCont
    var barButtonItem : UIBarButtonItem?
    barButtonItem = UIBarButtonItem(image: UIImage(named: "Logout.png"), style: UIBarButtonItemStyle.plain, target: self, action: Selector("actionLogoutHandler"))

   self.navigationController?.navigationItem.rightBarButtonItem = barButtonItem
}

@objc func actionLogoutHandler()  {
    print("Inside logout")
    currentController?.navigationController?.popToRootViewController(animated: true)
}

非常感谢这方面的任何帮助。

试试这个:

guard let customNavigationController = self.navigationController as? CustomNavigationController else { return }
customNavigationController.addLogoutButtonWithVC()

它应该看起来像:

if let nav = self.navigationController as? CustomNavigationController { nav.addLogoutButton(withVC: self, actionLogoutHandler:#selector(CustomNavigationController .actionLogoutHandler(_:)) }

你应该试试我的代码如下。

您需要导航控制器的对象并用于在按钮目标中设置。

    if let navigationcontroller = self.navigationController as? CustomNavigationController {
    navigationcontroller.addLogoutButton(withVC: self,
                        actionLogoutHandler:#selector(navigationcontroller.actionLogoutHandler(_:))
}

    @objc func actionLogoutHandler()  {
    print("Inside logout")
    self.popToRootViewController(animated: true)
}