Ios 查找视图控制器是否已在视图堆栈上
我想检查是否已将我的视图添加到视图中,以便用户无法将新的UIViewController重复添加到视图中Ios 查找视图控制器是否已在视图堆栈上,ios,objective-c,Ios,Objective C,我想检查是否已将我的视图添加到视图中,以便用户无法将新的UIViewController重复添加到视图中 if (!self.fmovc) { self.fmovc = [[FMOVC alloc] initWithNibName: @"FMOVC" bundle:nil]; } BOOL viewAlreadyDisplayed = NO; for (UIView * b in self.view.subviews) {
if (!self.fmovc)
{
self.fmovc = [[FMOVC alloc] initWithNibName: @"FMOVC" bundle:nil];
}
BOOL viewAlreadyDisplayed = NO;
for (UIView * b in self.view.subviews)
{
if ([b isKindOfClass:[FMOVC class]])
{
viewAlreadyDisplayed = YES;
}
}
if (!viewAlreadyDisplayed)
{
[self.view addSubview:self.fmovc.view];
}
这不起作用,因为它从不触发
viewAlreadyDisplayed = YES;
如果您的视图已经显示,正确的方法是什么
谢谢,
-代码在添加之前,只需从SuperView中删除…它可能会解决您的问题
[self.fmovc.view removeFromSuperview];
[self.view addSubview:self.fmovc.view];
使UIView成员变量为thatView 如果(!thatView){ thatView=[[UIView alloc]init]; [self.view addSubView:thatView]; } 释放superview后,释放该视图并使该视图为零 或 在分配该视图之前,请始终从superview中选中并删除该视图(如果存在)
希望这有帮助 按照您的代码,是否要在视图内部添加viewController?这对我来说没有逻辑?您想检查某个视图控制器是否已被推送/显示,或者某个视图是否已被子视图?有很多方法可以做到这一点,但您的代码不起作用的原因是您正在执行“([b isKindOfClass:[FMOVC class]])”,FMOVC是一个视图控制器,b是一个UIView。我没有测试它,但是您可以改为尝试“b==self.fmovc.view”