协议委托不调用函数
Protocol delegate doesn't call function
我在我的项目中实现了 side menu from github。我正在尝试在其中添加 protocol
。这样,当 cell
得到 selected 时,另一个 class(主 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")
}
}
}
当我 运行 应用程序和 select 一个单元格时,没有任何反应。 didSelectRowAtIndexpath
确实被调用了。 (我插入了一个 println
并打印出来),但是 didSelectCell
(protocol function
)没有被调用。我做错了什么,我该如何解决?
正如您在评论中提到的,您不能将委托设置为自己,并且您的 类 之间没有直接关系,因此您应该使用 NSNotificationCenter 而不是协议和委托。
//Class一个(mainVC.swift)
//Add Observer in init method
NSNotificationCenter.defaultCenter().addObserver(self, selector: "handler:", name: "MyNotification", object: nil)
//Handler
func handler(notif: NSNotification) {
println("MyNotification was handled");
println("userInfo: \(notif.userInfo)");
println("SelectedCellNumber \(notif.userInfo!["selectedCellNumber"])"); //Validate userInfo here. it could be nil
}
//Class乙(tableView.swift)
// Call from any method
NSNotificationCenter.defaultCenter().postNotificationName("MyNotification", object: nil, userInfo: ["selectedCellNumber" : indexPath.row]);
更多细节,你可以按照一些教程;
我在我的项目中实现了 side menu from github。我正在尝试在其中添加 protocol
。这样,当 cell
得到 selected 时,另一个 class(主 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")
}
}
}
当我 运行 应用程序和 select 一个单元格时,没有任何反应。 didSelectRowAtIndexpath
确实被调用了。 (我插入了一个 println
并打印出来),但是 didSelectCell
(protocol function
)没有被调用。我做错了什么,我该如何解决?
正如您在评论中提到的,您不能将委托设置为自己,并且您的 类 之间没有直接关系,因此您应该使用 NSNotificationCenter 而不是协议和委托。
//Class一个(mainVC.swift)
//Add Observer in init method
NSNotificationCenter.defaultCenter().addObserver(self, selector: "handler:", name: "MyNotification", object: nil)
//Handler
func handler(notif: NSNotification) {
println("MyNotification was handled");
println("userInfo: \(notif.userInfo)");
println("SelectedCellNumber \(notif.userInfo!["selectedCellNumber"])"); //Validate userInfo here. it could be nil
}
//Class乙(tableView.swift)
// Call from any method
NSNotificationCenter.defaultCenter().postNotificationName("MyNotification", object: nil, userInfo: ["selectedCellNumber" : indexPath.row]);
更多细节,你可以按照一些教程;