はじめに
久しぶりの記事な気がしています。
検索した時思いの外しっくりしたものを見つけられなかったので記事にしてみました。
【全体タップイベント制御】って書きましたが以下紹介コードは押させないのみ記述しています。
変更するのにフラグの変更だけなのでそうしました!
では早速
code
【swift】
var keywindow:UIWindow? = nil;
for (count, item) in UIApplication.shared.windows.enumerated() {
if(item.isKeyWindow){
keywindow = UIApplication.shared.windows[count];
break;
}
}
if(keywindow == nil){
keywindow = UIApplication.shared.windows[0];
}
keywindow?.isUserInteractionEnabled = false
【objective-c】
ちなみ『userInteractionEnabled』の確認の際はgetterあるみたいなのでそっち使うべきかと。
UIWindow *keywindow = nil;
for (int j = 0; j < UIApplication.sharedApplication.windows.count; j++) {
if(UIApplication.sharedApplication.windows[j].isKeyWindow){
keywindow = UIApplication.sharedApplication.windows[j];
break;
}
}
if(keywindow == nil){
keywindow = UIApplication.sharedApplication.windows[0];
}
keywindow.userInteractionEnabled = false;
【コード説明】
keywindow == nil
で入らなければ入れている理由ですが、最初だけ取得ができないからです。
UIApplication.sharedApplication.windows…開いているUIwindowの配列取得
その、
isKeyWindow…keywindowになっているか確認して後は
userInteractionEnabled…ユーザーイベントのフラグを変更!です。
ちなみに、、、、
keywindowとは、キーボードやタッチ関連イベントを受け取るwindowかということ。
ちなみにkeywindowは1つのwindowしかなれないので複数のUIWindowがkeywindowになることはありません。
後なぜfirstでなくfor文にしたかですがfirstだけの判断で本当に全て制御できるのかということがドキュメント探してみましたが見つからなかったからです、、
後最近だとシーンからの取得の方がいいのでは?とありそうですが、keywindowの取得のみならこっちの方が記述的にすっきりするかと思いこのような書き方にさせていただいています。
最後に
これはもっとこうすべき方がいいなどあれば教えて頂きたいです!
よろしくお願いします。