在self.view上添加的UIView superview返回nil



我检查视图是否已经添加/存在,然后我需要删除它

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

self.upgradeView被添加到self.view上。但condition返回false,self.upradeView从未被删除。

有遗漏的东西吗?

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

我已经在视图中添加了此代码,它将出现在用于在self.view上添加self.upgradeView的代码下方

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

您什么时候执行if语句?这可能是因为当调用该视图时,尚未添加该视图。

请提供更多代码,包括添加视图的位置以及调用this if语句的位置。

您可能需要使用UIView's -(BOOL)isDescendantOfView:(UIView *)view;来检查是否添加了视图。

if(![[self upgradeView] isDescendantOfView:[self view]]) { 
    [self.view addSubview:[self upgradeView]];
} else {
    [[self upgradeView] removeFromSuperview];
}

我遇到了同样的问题,试图在网上搜索任何答案,但没有找到。然后我找到了这个,但也没有解决方案。我尝试了一些调试,以便在代码的不同位置打印superview。我发现一开始这个值是nil,但后来就不是了。

所以我认为这个问题是由于UIView没有完全加载,然后我搜索了几个关于如何检查UIView是否加载的主题。我终于找到了解决办法。如果我在layoutSubviews函数中检查superview属性,并在那里设置所有其他属性。一切都很好!

我知道这是一个老帖子,以防有人同样头疼。

最新更新