Swift 3: делегат в TapGestureRecognizer в Generics не вызван
У меня есть такой протокол:
public protocol SubmitAgeDelegate : class {
func changeSubmitButtonBool()
}
Проблема заключается в том, что я хочу назвать его в классе generics.
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 ")
}
Ответы
Ответ 1
Вы никогда не устанавливаете submitAgeDelegate
для GenericController
. Наличие члена с тем же именем в вашем классе MyCell
не помогает.
Вам нужно получить ссылку на ваш GenericController
, чтобы установить его делегат; там нет способа обойти это. (Это не имеет ничего общего с дженериками, это то же самое для не-общих классов.) Поскольку похоже, что вы используете его как UICollectionViewCell
, вы можете использовать ссылку, которую вы делаете в tableView:cellForRowAtIndexPath:
или аналогично.