Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 查找视图控制器是否已在视图堆栈上_Ios_Objective C - Fatal编程技术网

Ios 查找视图控制器是否已在视图堆栈上

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) {

我想检查是否已将我的视图添加到视图中,以便用户无法将新的UIViewController重复添加到视图中

    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”