在swift中调用childcontroller的parentController方法

问题描述:

我正在做一个简单的customtableview项目。我有viewController.swift和customcell.swift文件。我在viewcontroller文件里面有一个方法。我怎样从customcell文件中调用该方法。提前感谢在swift中调用childcontroller的parentController方法

以下是几种方法来完成您的对象之间的沟通。

  1. 您可以使用delegation pattern并基本上将viewcontroller设置为customcell实例的委托。然后customecell对象会在需要的时候在委托上调用所需的方法。
  2. 您可以在调用所需方法的viewcontroller对象中设置closure,然后将该关闭传递给customcell对象,以便在您想从customcell实例执行viewcontroller的方法时使用。
  3. 您可以使用NSNotifications从customcell与viewcontroller进行通信。 customcell会“发布”一个通知,并且视图控制器(在注册了“观察”该特定通知之后)可以调用任何需要执行的方法。

还有其他方法可以解决这个问题,但这些是前三个想到的。希望给你一些关于如何继续的想法。

下面是委托模式的一个简单示例。

你的父母是这样的:

protocol ParentProtocol : class 
{ 
    func method() 
} 

class Parent 
{ 

    var child : Child 

    init() { 
     child = Child() 
     child.delegate = self 
    } 
} 

extension Parent : ParentProtocol { 
    func method() { 
     println("Hello") 
    } 
} 

你的孩子是这样的:

class Child 
{ 
    weak var delegate : ParentProtocol? 

    func callDelegate() { 
     delegate?.method() 
    } 

} 
+0

很好的解释...但我试图做的是在childcontroller parentcontroller创建对象。所以我可以通过childcontroller访问parentcontroller方法。你能帮我解决这个问题吗? – user3823935 2015-02-10 10:28:23

+0

委托模式可以做你正在问的东西(给子控制器一个控制父项的对象)。您必须将父级控制器传递给子控制器以获取它。 – PixelCloudSt 2015-02-10 17:14:36

+0

如果你真的需要获得父控制器对象的实例,并且没有任何能力将它从父对象传递给子对象,那么可以像单例对象那样做一些非常难看的事情。坦率地说,当你考虑使用单例时,在很多情况下,现在是时候重新考虑你的架构了。 – PixelCloudSt 2015-02-10 17:20:56