我有两个班。 1类(CollectionViewController)具有一个功能,我需要在2类(TableviewController)中调用此函数。有人可以帮我解决这个问题吗?我是按照下面的方法完成的,但是无法正常工作。
extension MenuController {
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("clicked menu item...")
let sideMenuContorller = HomeController()
sideMenuContorller.closeSideMenu()
}
}
答案 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