我遇到了一个让我疯狂的问题,如何在UITableViewCell中调用视图控制器中的函数。 - 我在Swift中这样做。
所以我有一个名为mainVC的View Controller 在这个mainVC中,我已经声明了一个tableView,它在该tableView单元格中保存了一个UITableViewCell(Custom / Dynamic),我想调用一个在mainVC中声明的函数。如果我喜欢self.superview?.myFunc不起作用。
我希望有人可以帮助我...
答案 0 :(得分:3)
不幸的是,这并不容易。 您想要了解的是NSNotificationCenter甚至更好: - 代表。 如果您想更好地了解代表,我建议您使用本教程:http://www.raywenderlich.com/75289/swift-tutorial-part-3-tuples-protocols-delegates-table-views
如果您不想阅读所有内容,我会尽力在此解释。
假设你有两个视图控制器:mainVC和otherVC。
在otherVC的类定义之上,添加以下代码:
protocol OtherVCDelegate {
func cellClicked()
}
在otherVC的类中,添加以下属性:
var delegate: OtherVCDelegate?
在didSelectRow(或执行代码的地方)中,添加以下代码:
self.delegate?.cellClicked()
现在,回到mainVC:通过将mainVC添加到类中来使mainVC符合此委托:
class MainViewController: UIViewController, DetailDelegate {
}
在MainViewController中添加委托函数,并确保将你想要执行的函数放入:
func cellClicked() {
println("Cell was clicked")
myFunc()
}
你要做的最后一件事是让MainViewController成为OtherViewController的委托。必须在从mainVC访问otherVC的地方完成此操作。让我们说它是在prepareForSegue中完成的:
if segue.identifier == "showDetail" {
(segue.destinationViewController as DetailViewController).delegate = self
}
起初有点复杂,但是一旦掌握了它,它就会在公园里散步。