在swift中调用childcontroller的parentController方法
问题描述:
我正在做一个简单的customtableview项目。我有viewController.swift和customcell.swift文件。我在viewcontroller文件里面有一个方法。我怎样从customcell文件中调用该方法。提前感谢在swift中调用childcontroller的parentController方法
答
以下是几种方法来完成您的对象之间的沟通。
- 您可以使用delegation pattern并基本上将viewcontroller设置为customcell实例的委托。然后customecell对象会在需要的时候在委托上调用所需的方法。
- 您可以在调用所需方法的viewcontroller对象中设置closure,然后将该关闭传递给customcell对象,以便在您想从customcell实例执行viewcontroller的方法时使用。
- 您可以使用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()
}
}
很好的解释...但我试图做的是在childcontroller parentcontroller创建对象。所以我可以通过childcontroller访问parentcontroller方法。你能帮我解决这个问题吗? – user3823935 2015-02-10 10:28:23
委托模式可以做你正在问的东西(给子控制器一个控制父项的对象)。您必须将父级控制器传递给子控制器以获取它。 – PixelCloudSt 2015-02-10 17:14:36
如果你真的需要获得父控制器对象的实例,并且没有任何能力将它从父对象传递给子对象,那么可以像单例对象那样做一些非常难看的事情。坦率地说,当你考虑使用单例时,在很多情况下,现在是时候重新考虑你的架构了。 – PixelCloudSt 2015-02-10 17:20:56