1
2

More than 3 years have passed since last update.

全体タップイベント制御 swift Objective-C

Last updated at Posted at 2020-08-16

はじめに

久しぶりの記事な気がしています。
検索した時思いの外しっくりしたものを見つけられなかったので記事にしてみました。

【全体タップイベント制御】って書きましたが以下紹介コードは押させないのみ記述しています。

変更するのにフラグの変更だけなのでそうしました!:shamrock:

では早速:sunflower:

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;

【コード説明】:nerd:

keywindow == nil

で入らなければ入れている理由ですが、最初だけ取得ができないからです。

UIApplication.sharedApplication.windows…開いているUIwindowの配列取得
その、
isKeyWindow…keywindowになっているか確認して後は
userInteractionEnabled…ユーザーイベントのフラグを変更!です。

ちなみに、、、、
keywindowとは、キーボードやタッチ関連イベントを受け取るwindowかということ。

ちなみにkeywindowは1つのwindowしかなれないので複数のUIWindowがkeywindowになることはありません。

後なぜfirstでなくfor文にしたかですがfirstだけの判断で本当に全て制御できるのかということがドキュメント探してみましたが見つからなかったからです、、

後最近だとシーンからの取得の方がいいのでは?とありそうですが、keywindowの取得のみならこっちの方が記述的にすっきりするかと思いこのような書き方にさせていただいています。

最後に

これはもっとこうすべき方がいいなどあれば教えて頂きたいです!
よろしくお願いします。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2