web-dev-qa-db-ja.com

UIView:ビューがすでに存在するかどうかを確認する方法は?

サブビュー(私の場合はpageShadowView)が既にビューに追加されているかどうかを確認する方法を考えていました。

私はこれを思いつきましたが、それは実際には機能しません:

if ([pageShadowView isKindOfClass:[self.view class]]) {
        [self.view addSubview:pageShadowView];
    }

また、私はまだ自分自身について混乱しています。これは、現在のViewControllerのビューについて話していることを明確にすることに関係していることはわかっていますが、(1)他のViewControllerがない場合、または(2)それが本当に重要でない場合は、本当に必要ですか?別のviewControllerを参照したい場合は、必ずそれを呼び出しますか?

これが非常に基本的なものである場合は申し訳ありませんが、コメントをいただければ幸いです。

24
n.evermind

ここに:

BOOL doesContain = [self.view.subviews containsObject:pageShadowView];

そして、はい、これが必要ですselfUIViewControllerには明示的なivarの「ビュー」はありません。 self.viewステートメントは、実際にはUIViewControllerのビューのゲッターであるメソッド[self view]の呼び出しです。

84

一意のタグを付けます:view.tag = UNIQUE_TAG、次に、コンテナビューの存在を確認します。

BOOL alreadyAdded = [containerView viewWithTag:UNIQUE_TAG] != nil;
25
coneybeare

このようなサブビューを見つけることができます

for(UIView *view in self.view.subviews)
{
    if([view isKindOfClass:[UIView class]])
    {
        //here do your work
    }
}
8
saadnib

SwiftisDescendant(of view: UIView) -> BoolまたはObj-C- (BOOL)isDescendantOfView:(UIView *)viewで検索する方法がもう1つあります。

Swift

    if myView.isDescendant(of: self.view) {
        //myView is subview of self.view, remove it.
        myView.removeFromSuperview()
    } else {
        //myView is not subview of self.view, add it.
        self.view.addSubview(myView)
    }

Obj-C

if([myView isDescendantOfView:self.view]) {   
    //myView is subview of self.view, remove it.
    [myView removeFromSuperView];
} else {
    //myView is not subview of self.view, add it.
    [self.view addSubView:myView];
}
5
Hemang

Coneybeareの発言に追加するには、次のようにします。 object.tag = 100;を設定すると、

           if ([self.view.superview viewWithTag:100] == nil){ //if statement executes if the object with tag 100 in view.superview is absent (nil)

           if ([self.view viewWithTag:100] == nil){ //if statement executes if the object with tag 100 in view (not superview) is absent (nil)
1
user3344717

あなたのビューが存在するかどうかを見つけるための最良かつ簡単な方法、ビューがスーパービューに含まれているかどうかを確認する方法や、Uiviewがすでに削除されているとエラーが発生するため、このメソッドが失敗したときに表示する方法はたくさんあります。だからコードはここにあります:ここでerrorViewは私のUiViewです

 errorView.tag = 333

 if ( self.view?.viewWithTag(333) != nil ){
    print("contain")
 }

 else {
    print("not contain")
 }
1
Muhammad Ahmad

ビューの保持値を追加する

次に、保持値を確認します

> 1の場合は存在し、完全な場合は2

その後、一度リリースします

0
chings228

Swiftバージョン:

let doesContain = self.view?.subviews.contains(pageShadowView)
0
Dave Levy