协议委托不调用函数

时间:2015-09-06 16:41:40

标签: ios swift delegates protocols

我在我的项目中实施了side menu from github。我正在尝试在其中添加protocol。这样,当选择cell时,将调用另一个类(主viewController)中的函数。这是我的代码:

tableView.swift

protocol menuTableViewProtocol {
    func didSelectCell(SelectedCellNumber : Int)
}

var delegate : menuTableViewProtocol?

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    self.delegate?.didSelectCell(indexPath.row)
}

mainVC.swift

class MainViewController: UIViewController, menuTableViewProtocol {

    ...

    // Conforming to Protocal
    func didSelectCell(SelectedCellNumber: Int)
    {
        switch SelectedCellNumber {
        case 0:
            println("0")

        case 1:
            println("1")

        case 2:
            println("2")

        default:
            println("0101010")
        }
    }
}

当我运行应用程序并选择一个单元格时,没有任何反应。 didSelectRowAtIndexpath会被调用。 (我插入了println并打印出来),但didSelectCellprotocol function)未被调用。我做错了什么,我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:0)

正如您在评论中提到的,您无法将委托设置为自己,并且您的类之间没有直接关系,因此您应该使用NSNotificationCenter而不是协议和委托。

// A类(mainVC.swift)

// Call from any method
NSNotificationCenter.defaultCenter().postNotificationName("MyNotification", object: nil, userInfo: ["selectedCellNumber" : indexPath.row]);

// B类(tableView.swift)

Categories

有关更多详细信息,您可以按照一些教程进行操作;

http://derpturkey.com/nsnotificationcenter-with-swift/