繁体   English   中英

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

[英]How can I call a func from another controller class?

我有两个班。 1类(CollectionViewController)具有一个功能,我需要在2类(TableviewController)中调用此函数。 有人可以帮我解决这个问题吗? 我做到了,如下所示,但它不起作用。

extension MenuController {

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

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

    }
}

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

(打个比方:你想改变你的车的广播电台为您打造一个全新的车,设置在该车上的广播电台,抛出新的车开走,然后不知道为什么你的车的广播电台并没有改变。 )

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

不知何故,您的MenuController需要对现有 HomeController的引用。

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

    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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM