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

时间:2015-01-25 10:54:52

标签: xcode uitableview swift uiviewcontroller ios8

我遇到了一个让我疯狂的问题,如何在UITableViewCell中调用视图控制器中的函数。 - 我在Swift中这样做。

所以我有一个名为mainVC的View Controller 在这个mainVC中,我已经声明了一个tableView,它在该tableView单元格中保存了一个UITableViewCell(Custom / Dynamic),我想调用一个在mainVC中声明的函数。如果我喜欢self.superview?.myFunc不起作用。

我希望有人可以帮助我...

1 个答案:

答案 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
    }

起初有点复杂,但是一旦掌握了它,它就会在公园里散步。