カスタムビューがクリックに応答しない問題について


z
最近、多くの人が質問しているのを見て、ビューをカスタマイズしてテストするときに正常に使用することができますが、プロジェクトに追加してクリックに応答しません.
実はこの問題の本質は応答者チェーンであり、あなたのビューコントロールは応答者チェーンに組み込まれていないので、それは必然的に応答しません.
応答者チェーンに追加されない場合は、通常、次のような場合があります.
1.ビュー自体のuserInteractionEnabledはNOです.このプロパティはviewの基本プロパティで、カスタムビューではこのプロパティが継承されます.このプロパティをNOに設定した場合、または親ビューのプロパティをNOに設定した場合(UIImageなど、デフォルトではuserInteractionEnabled=NO).あなたのビューが応答者チェーンに追加されないのも必然的な現象です.
2.userInteractionEnabled=YESを設定したと言うかもしれませんが、これが2つ目のよくあるエラーです.その文が実行されたことを確認しましたか?
通常、カスタムviewでは、ロード方法は2つあります.
    1.ビューのinitWithFrame関数またはinit関数を呼び出してビューインスタンスを取得するalloc-init方式.
    2.loadNibNamedまたはxibの方式で、この方式はinitとinitWithFrame関数を呼び出すのではなく、awakeFromNib関数を呼び出す.言い換えれば、init関数にuserInteractionEnabled=YESを設定しているが、xibの方式でビューをロードしている場合、この文は実行されず、無効である.あなたのビューは依然として応答しません.
awakeFromNibについては、loadNibNameを使用する過程でいくつかのことをすることができますが、viewdidloadとは異なります.詳細は次のとおりです.
awakeFromNib
 .nib , awakeFromNib .nib , awakeFromNib , 。
 .nib view awakeFromNib 。
 , IB , awakeFromNib , 。
 UIView load nib 。bundle load nib view awakeFromNib 。
viewDidLoad
 view viewDidLoad, .nib viewDidLoad。

3.また、もう一つ、bounceの問題です.もしあなたのコントロールが親コントロールのbounceの外にある場合、申し訳ありません.これは、あなたのコントロールが応答チェーンに追加されないことを意味します.応答イベントチェーンの形成はhitTest:withEvent:およびpointInside:withEvent:関数に依存し、apiを参照して応答チェーンの原理をよりよく理解することができます.コントロールが親コントロールのbounceの外にある場合は、表示は正常かもしれませんが、イベントに応答するには問題があります.背景色が透明なとき、コントロール階層の位置に気づかなかったとき、あるコントロールが応答できないことに気づいたら、この間違いを犯した可能性が高いと思います.