如何从另一个控制器类调用函数?

时间:2019-08-20 18:33:36

标签: swift uicollectionview call func

我有两个班。 1类(CollectionViewController)具有一个功能,我需要在2类(TableviewController)中调用此函数。有人可以帮我解决这个问题吗?我是按照下面的方法完成的,但是无法正常工作。

extension MenuController {

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        print("clicked menu item...")
        let sideMenuContorller = HomeController()
        sideMenuContorller.closeSideMenu()

    }
}

2 个答案:

答案 0 :(得分:0)

是的,不要那样做。您编写的代码创建了HomeController的全新实例,并尝试调用其closeSideMenu()方法。那行不通。

(类推:您想更改汽车收音机中的电台。您要制造一辆全新的汽车,将电台设置在该汽车的收音机中,将新车扔掉,然后想知道为什么您的汽车广播电台还没有?改变了。)

如何创建这两个视图控制器?您需要解释如何创建这些视图控制器,以及它们如何相互关联。

以某种方式,您的MenuController需要引用现有 HomeController

答案 1 :(得分:-1)

我认为您可以使用称为“委托”的示例:

    protocol ClickedMenuItemDelegate {
     func userDidPressedMenuItem()
    }

    class MenuController {
     delegate: ClickedMenuItemDelegate?
      override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        delegate?.userDidPressedMenuItem()
       }
    }

    class HomeController: ClickedMenuItemDelegate {
    // where you create an object of type MenuController you first set its delegate property
     menuControllerInstace.delegate = self
     func userDidPressedMenuItem() {
       closeSideMenu()
    }

这个想法是,当您调用委托?.userDidPressedMenuItem()时,将在您设置委托= self的类中的userDidPressedMenuItem()方法内的代码被调用 您可以在这里找到更多详细信息:https://learnappmaking.com/delegation-swift-how-to/ https://docs.swift.org/swift-book/LanguageGuide/Protocols.html