2016-12-17 6 views
1

呼び出されません。私はそうのようなプロトコルを持っている:スウィフト3:ジェネリックでTapGestureRecognizer内の委任は

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 ") 
} 
+0

どこでも 'submitAgeDelegate'を設定しましたか?あなたがした場合は、そのコードを含めてください。あなたがしなかったなら、それはあなたの問題です。 – Suragch

+0

こんにちはSuragch、あなたの洞察力のおかげで、私はコードに加えて、基本的に私は委任クラスとの関係がないので、私はそのクラスのインスタンスを持っていない可能性があります。 例えば、MyCellのviewdidLoad内のGenericController.delegate = selfのようなものです。 – Marin

答えて

2

あなたはGenericControllersubmitAgeDelegateを設定されることはありません。あなたのMyCellクラスに同じ名前のメンバーを持つことは助けになりません。

デリゲートを設定するには、GenericControllerへの参照を取得する必要があります。その周りに方法はありません。 (これはジェネリックスとは関係ありません。非ジェネリッククラスでも同じです)UICollectionViewCellとして使用しているように見えるので、tableView:cellForRowAtIndexPath:などの参照を使用することがあります。

+0

はいインスタンスを作成せずにデリゲートを呼び出すことを基本的に誘導したかったのですが、「デリゲートを設定するにはGenericControllerへの参照を取得する必要があります。私はそのインスタンスを何らかの形で取得しなければならないことを明確にしています。どうもありがとうございます! – Marin