##■ 概要
xibファイルで作成した重なる複数のviewに対して、特定のviewのみ UserInteractionEnabled
を有効にしたい時の解決法を紹介します。
アプリを作っていると何気にこういった状況に陥りますね。
同僚が知らなかったので、何気に知らない人もいるかと思いまして。
####◆ 環境
Xcode: v6.2
Swift: v1.1
階層は下記です。
大枠の View
の中に Button
がありその上に View
が重なり、その中に image
が置かれています。
表示上はimageを見せたいけれども、タップ時はbuttonを反応させたい、という時の対処方になります。
つまり、下記の図の button
のみを反応させたい!という状態。
####1. まず上記階層図の大Viewの UserInteractionEnabled
をtrueにします。
大Viewを選択し、Xcode右ペインのAttributeInspector内の下記赤枠にチェック。
これで大枠のviewにアクセス可能になりました。
####2. Buttonより上の階層のviewの UserInteractionEnabled
をfalse
にします。
上記階層図の灰色viewを選択し、Xcode右ペインAttributeInspector内の先ほどチェックを入れた箇所にチェックが入っていたら外します。
これで灰色viewへのインタラクションが無効になりました。
灰色viewの UserInteractionEnabled
がtrue
になっていると、ユーザタッチなどのイベントは灰色viewあるいは青色imageに反応してしまい、buttonまで到達しません。
※この時青色imageの
UserInteractionEnabled
はfalse
でもtrue
でも構いません。なぜなら、灰色viewの反応が無効になっている以上、内包されている青色imageにも反応は届かないからです。
同じ道理で、1.でtrue
にした大Viewがfalse
だった場合、そもそも 大View が内包しているすべてのviewに反応は届かなくなります。
####3.上記階層図の赤色buttonの UserInteractionEnabled
をtrueにします。
赤色buttonを選択してXcode右ペインのAttributeInspector内の下記赤枠にチェック。
これで上に灰色viewが重なっていても赤色buttonのインタラクションを反応させる事が可能になりました。