Xcode 从UITableViewCell调用视图控制器中的函数

Xcode 从UITableViewCell调用视图控制器中的函数,xcode,uitableview,swift,uiviewcontroller,ios8,Xcode,Uitableview,Swift,Uiviewcontroller,Ios8,我有一个让我发疯的问题,怎么可能从UITableViewCell中调用视图控制器中的函数。-我是用斯威夫特做的 所以我有一个视图控制器,叫做mainVC 在这个mainVC中,我声明了一个tableView,其中包含一个UITableViewCell(自定义/动态),我想调用一个在mainVC中声明的函数。如果我真的喜欢self.superview?.myFunc不工作 我希望有人能帮我…不幸的是,事情没有那么容易。 您想了解的是NSNotificationCenter,甚至更好:-代表。 如果

我有一个让我发疯的问题,怎么可能从UITableViewCell中调用视图控制器中的函数。-我是用斯威夫特做的

所以我有一个视图控制器,叫做mainVC 在这个mainVC中,我声明了一个tableView,其中包含一个UITableViewCell(自定义/动态),我想调用一个在mainVC中声明的函数。如果我真的喜欢self.superview?.myFunc不工作


我希望有人能帮我…

不幸的是,事情没有那么容易。 您想了解的是NSNotificationCenter,甚至更好:-代表。 如果您想更好地了解学员,我建议您学习本教程:

如果你不想读这些,我会尽力在这里解释

假设您有两个视图控制器:mainVC和otherVC

在otherVC中的类定义上方,添加以下代码:

protocol OtherVCDelegate {
   func cellClicked()
}
self.delegate?.cellClicked()
在otherVC中的类内,添加以下属性:

var delegate: OtherVCDelegate?
在didSelectRow(或执行代码的位置)中,添加以下代码:

protocol OtherVCDelegate {
   func cellClicked()
}
self.delegate?.cellClicked()
现在,回到mainVC:将mainVC添加到类中,使其符合此委托,如下所示:

class MainViewController: UIViewController, DetailDelegate {
}
在MainViewController中,添加委托函数并插入其中一个放置您要执行的函数:

func cellClicked() {
    println("Cell was clicked")
    myFunc()
}
您必须做的最后一件事是使MainViewController成为OtherViewController的代理。这必须在从主VC访问其他VC的地方完成。假设它是在PrepareForegue中完成的:

if segue.identifier == "showDetail" {
       (segue.destinationViewController as DetailViewController).delegate = self
    }

刚开始有点复杂,但一旦你掌握了它,你就可以在公园里散步了。

谢谢你的快速评论,我接受了答案,尽管它不是我想要的100%。我知道如何使用协议和委托,但正如我所知,我不能在TableViewCell中设置委托,也不能在TableViewCell类中使用prepareForSegue?我所有的代码都只发生在一个viewController类和一个UITableViewCell类中,所以没有发生segue…这对我来说似乎是一个棘手的部分。。。有什么想法吗?Aa,我明白了。嗯,我仍然相信代表是最好的方式。也可以为UITableViewCell设置委托。使用我上面提供的代码,但将所有来自otherVC的代码放到UITableViewCell子类中。然后,在UITableViewCell子类中,您可以在ToucheSStart中添加self.delegate?.cellClicked()。记住在cellForRow中传入cell.delegate=self,使mainVC成为委托。我已经测试过了,应该可以用了!另一方面,如果所有这些都发生在同一个视图控制器中,则实际上不需要这样做。您应该能够使用常规的didSelectRow并从那里启动函数。如果看不到更多的代码,很难判断。如果你能弄明白,请告诉我。再次感谢,是的,我已经搞定了:)