Swift自定义UITableViewCell委托给UIViewController只有一个协议的作品

在应用程序中,我有我的UIViewController符合的自定义协议。 我有一个自定义的tableViewCell类,并在那里有UIImageView和UITextView。 出队后,我将单元格的委托设置为UIViewController。 然而,只有一个自定义协议使callback(imagepicker协议)。

protocol customProtocol1{ func pickImage(myInt: Int) } protocol customProtocol2{ func protocol2 (myInt: Int) } class controller1: UIViewController, UITableViewDelegate, customProtocol1, customProtocol2 { func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } func tableView(tableView: UITableView, numberOfRowsInSection section:Int) -> Int { return 3 } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as! CustomTableCellClass cell.delegate = self return cell } func pickImage ( myInt: Int){ print("This line prints") } func protocol2 (myInt: Int){ print ("This line doesn't print") } } 

这里是customTableCellClass代码:

 class CustomTableCellClass: UITableViewCell, UITextFieldDelegate, UITextViewDelegate { var imageDelegate: customProtocol1? @IBAction func pickImage( sender: AnyObject) { imageDelagate?.pickImage(205) } var somethingElseDelegate: customProcotol2? @IBActon func clickOnButton( sender: AnyObject) { print("this line prints") somethingElseDelegate?.protocol2(2) } override func awakeFromNib(){ super.awakeFromNib() } } 

我的问题是,为什么第一个协议得到callback,但第二个没有?

从我在代码中看到的内容中,只设置一个委托,将您的代码更改为cellForRowAtIndexPath

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as! CustomTableCellClass cell.imageDelegate = self cell.somethingElseDelegate = self return cell } 

你的custom cell有两个委托属性imageDelegatesomethingElseDelegate ,但在你的tableView(tableView:cellForRowAtIndexPath:)实现中,你只能分配一个属性。

如果你设置了这两个属性你的实现应该工作。

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as! CustomTableCellClass cell.imageDelegate = self cell.somethingElseDelegate = self return cell }