2

ビューが既に追加されている/存在するかどうかを確認してから、それを削除する必要があります

if([self.upgradeView superview])
        [self.upgradeView removeFromSuperview];

self.view に self.upgradeView を追加しました。ただし、条件は false を返し、self.upgradeView は削除されません。

見逃しているものはありますか?

=========================更新======================= ============

このコードをビューに追加しましたが、このようにself.viewにself.upgradeViewを追加するために使用されるコードのすぐ下に表示されます

if ([isLoggedInPremiumUser isEqualToString:@"0"])
{
    [self createUpgradeFooterView];
}
else
{
    if([self.upgradeView superview])
        [self.upgradeView removeFromSuperview];
}
4

3 に答える 3

0

私は同じ問題を抱えていて、オンラインで答えを検索しようとしていましたが、何も見つかりませんでした。それから私はこれを見つけましたが、解決策もありません。superviewコード内の別の場所で印刷するためにいくつかのデバッグを試みました。最初はこの値がそうであることがわかりましたnilが、そうではありません。

UIViewしたがって、この問題はが完全にロードされていないことが原因であると思います。次に、UIViewがロードされているかどうかを確認する方法についていくつかのトピックを検索しました。最後に、私は解決策を得たと思います。superview関数でプロパティをチェックし、layoutSubviewsそこに他のすべてのプロパティを設定するとします。すべてがうまく機能します!

誰かが同じ頭痛を抱えている場合に備えて、これは古い投稿であることを知っています。

于 2016-03-07T00:40:17.723 に答える
0

UIView's -(BOOL)isDescendantOfView:(UIView *)view;ビューが追加されているかどうかを確認するために使用することができます。

if(![[self upgradeView] isDescendantOfView:[self view]]) { 
    [self.view addSubview:[self upgradeView]];
} else {
    [[self upgradeView] removeFromSuperview];
}
于 2015-03-23T06:33:38.387 に答える
0

この if ステートメントをいつ実行しますか? これが呼び出されたときに、ビューがまだ追加されていない可能性があります。

ビューを追加する場所や、この if ステートメントが呼び出される場所など、より多くのコードを提供してください。

于 2015-03-23T06:29:56.957 に答える