我有这样一个协议:
public protocol SubmitAgeDelegate : class {
func changeSubmitButtonBool()
}
问题是我想在泛型类中调用它。
open class GenericController<UICollectionViewCell,UICollectionReusableView> {
weak var submitAgeDelegate: SubmitAgeDelegate?
在uitapGestureRecognizer中
func tapGestureDidRecognize(_ gesture: UITapGestureRecognizer) {
if let myAgeDelegate = self.submitAgeDelegate {
print("inside delegate") //Never gets inside
myAgeDelegate.changeSubmitButtonBool()
}
}
不太清楚为什么没人叫它?类似的方法也适用于带有ibaction函数的常规类。
在我的另一堂课上:
open class MyCell: ActionCell, SubmitAgeDelegate {
weak var submitAgeDelegate: SubmitAgeDelegate?
public override init(frame: CGRect) {
super.init(frame: frame)
submitAgeDelegate = self
initialize()
}
// Delegate
public func changeSubmitButtonBool(){
print("called ")
}
最佳答案
您从未设置过submitAgeDelegate
的GenericController
。在MyCell
类中有一个同名的成员没有帮助。
您需要获得对GenericController
的引用才能设置其委托;这是不可能的。(这与泛型没有任何关系;对于非泛型类也是一样的。)因为它看起来像是用作UICollectionViewCell
,所以可以使用在tableView:cellForRowAtIndexPath:
或类似文件中所做的引用。