首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

viewWillDisappear:确定是正在弹出视图控制器还是正在显示子视图控制器

在iOS开发中,viewWillDisappear是一个UIViewController生命周期方法,它在视图控制器的视图即将消失之前被调用。这个方法可以用于执行一些清理操作,例如停止定时器、停止网络请求、释放资源等。

在视图控制器的生命周期中,viewWillDisappear方法通常在以下两种情况下被调用:

  1. 当视图控制器的视图被弹出屏幕时,例如通过popViewControllerdismiss方法。
  2. 当视图控制器的视图被其他视图所覆盖时,例如通过present方法弹出一个新的视图控制器。

viewWillDisappear方法中,可以通过检查isMovingFromParent属性来确定视图控制器是被弹出还是被覆盖。如果isMovingFromParenttrue,则表示视图控制器正在被弹出;如果为false,则表示视图控制器正在被覆盖。

以下是一个简单的示例代码:

代码语言:swift
复制
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    
    if isMovingFromParent {
        // 视图控制器正在被弹出
    } else {
        // 视图控制器正在被覆盖
    }
}

需要注意的是,viewWillDisappear方法并不能保证一定会被调用,因为在某些情况下,例如应用程序被终止或视图控制器被销毁时,该方法可能不会被调用。因此,在实际开发中,应该尽量避免在该方法中执行必要的操作,而应该将这些操作放在其他方法中执行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ViewController及View的生命周期1. 起因2. Controller的生命周期3. View的生命周期4. 内存警告

Controller的生命周期 系统提供了控制器显示到消失的四个方法。 千万不要看到方法名中间出现了view就以为这是视图的方法。这些都是控制器的生命周期。...isBeingDismissed 会在viewWillDisappear & viewDidDisappear 方法内部调用这个方法判断视图控制器视图的隐藏是否因为视图控制器被清退 (dismissed...,与上面被其它视图控制器显示对应,如信息录入完成,返回之前的视图控制器)。...willMoveToWindow:在视图移动前发出的回调。 willRemoveToSubview:回调通知父视图视图即将被删除 4. 内存警告 首先要判断一下,当前view有没有被显示。...如果正在显示,做处理,会让用户感觉很不舒服。 更严谨一点,还需要判断view是否已经加载。如果没有加载,就不需要干掉了。 实际开发中为了写的少点,都会写在基类控制器中。

1.3K30

UIViewController的生命周期及iOS程序执行顺序

UIViewController的生命周期及iOS程序执行顺序 当一个视图控制器被创建,并在屏幕上显示的时候。...视图已经被从屏幕上移除,用户看不到这个视图了 3、dealloc视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放 关于viewDidUnload:在发生内存警告的时候如果本视图不是当前屏幕上正在显示视图的话...,viewDidUnload将会被执行,本视图的所有视图将被销毁,以释放内存, 此时开发者需要手动对viewLoad、viewDidLoad中创建的对象释放内存。...2) - (void)viewDidUnload; 在内存足够的情况下,软件的视图通常会一直保存在内存中,但是如果内存不够,一些没有正在显示的viewcontroller就会收到内存不够的警告,然后就会释放自己拥有的视图...那么可以重写这个方法,在这里对正在显示视图进行进一步的设置。

1.4K110

iOS面试题-UI篇

树形结构,也可以向它的layer上添加layer,来完成某些特殊的显示。...当你调用 setNeedsDisplay 方法时, UIKit 将会把当前图层标记为dirty,但还是显示原来的内容,直到下一次的视图渲染周期,才会将标记为 dirty 的图层重新建立Core Graphics...A的view的部分区域中显示 假设控制器B的view中有一个UIScrollView这样一个控件 如果此时在控制器B的viewDidLoad中设置UIScrollView的contentSize的话会导致不准确的问题...)遍历控件,重复前面的两个步骤 如果没有符合条件的控件,那么就自己处理 事件响应者链 如果当前view是控制器的view,那么就传递给控制器 如果控制器不存在,则将其传递给它的父控件 在视图层次结构的最顶层视图也不能处理接收到的事件或消息...view,那么控制器就是上一个响应者 如果当前这个view不是控制器的view,那么父控件就是上一个响应者 [1240] 面试题持续整理更新中,如果你正在面试或者想一起进阶,不妨添加一下交流群1012951431

1.9K21

UI篇-VC的生命周期以及UIView的layoutSubviews和drawRect方法

view将要显示 viewWillLayoutSubviews:控制器的view将要布局子控件 viewDidLayoutSubviews:控制器的view布局子控件完成 viewDidAppear:控制器的...view完全显示 viewWillDisappear控制器的view即将消失的时候 viewDidDisappear:控制器的view完全消失的时候 多个viewControllers跳转 当我们点击...一个很常见的问题,我们需要在VC被销毁的时候处理一些事情,可是 viewWillDisappear 不管是入栈新的视图还是出栈当前视图都会被调用,无法判断,结合我之前说的原理,我们可以利用下面这个方法判断当前...setNeedsLayout会默认调用layoutSubViews,就可以处理视图中的一些数据。...**drawRect:方法不能手动显示调用,必须通过调用setNeedsDisplay 或 者 setNeedsDisplayInRect,让系统自动调该方法。强行调用也不会起作用的。

1.8K30

UIViewController生命周期

由于视图视图控制器管理,所以讨论视图的加载方式时,主要讨论视图控制器的加载方式。 通过Storyboard加载:这是苹果推荐的方式。...此时整个视图层次(view hierarchy)已经被放到内存中。 无论是从nib文件加载,还是通过纯代码编写界面,viewDidLoad方法都会执行。...在这里可以进行一些显示前的处理。比如键盘弹出,一些特殊的过程动画(比如状态条和navigationbar颜色)。...4、viewWillLayoutSubviews 即将开始视图位置布局 5、ViewDidLayoutSubviews 用于通知视图的位置布局已经完成 6、ViewDidAppear 当viewWillAppear...7、ViewWillDisAppear 视图即将消失 8、ViewDidDisAppear 视图已经消失 9、ViewWillUnload(已废弃) 当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用

1.8K10

App的生命周期

loadView 当执行到loadView方法时,如果视图控制器是通过nib创建,那么视图控制器已经从nib文件中被解档并创建好了,接下来任务就是对view进行初始化。...比如,设置设备不同方向时该如何显示;设置状态栏方向、设置视图显示样式等。...viewDidAppear 在view被添加到视图层级中以及多视图,上下级视图切换时调用这个方法,在这里可以对正在显示视图做进一步的设置。...didReceiveMemoryWarning 在内存足够的情况下,app的视图通常会一直保存在内存中,但是如果内存不够,一些没有正在显示的viewController就会收到内存不足的警告,然后就会释放自己拥有的视图...如果有多个子视图,willRemoveSubview 会循环执行,直到移除所有视图

1.2K10

Cocoa编程中视图控制器视图类详解

UIViewController实例负责设置视图的外观和它显示视图。 UINavigationController类 1. 导航控制器使用内置动画在视图之间切换; 2....每一个导航控制器都拥有一个根视图控制器RootViewController,它是“导航弹出栈”的基础,是根。5....作为弹出回上一级视图控制器的Back按钮是自动产生并处理的,无需用户干预。 3. 可使用popViewControllerAnimated:BOOL弹出当前视图控制器并向左显示前一个视图。 4....可使用popToViewController: animated:弹出到指定的视图控制器,即不一定是上一个。 5....注意:对于导航栏定制,对定制实际标题的最简单方式时使用视图控制器而不是导航项的title属性: C代码   self.title = @"Hello";   self.title = [[[NSBundle

5K50

iOS导航栏使用总结

导航栏视图层级图 从图中可以看出,导航栏的底部分割线是一个UIImageView对象,而且高度只有0.5,所以我们可以据此获取到导航栏的底部分割线对象,在一个视图控制器中实现此需求,代码如下: #import...-(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; self.navBarBottomImage.hidden...,默认为YES,用于优化滑动类视图(继承于UIScrollView的视图)在视图控制里的显示: iOS系统的导航栏UINavigationBar与标签栏UITabBar默认都是半透明模糊效果,在这种情况下系统会对视图控制器的...UI布局进行优化:视图控制器里面第一个被添加进去的视图是滑动类视图,并且其Frame是整个屏幕大小时,系统会自动调整其contenInset,以保证滑动视图里的内容不被UINavigationBar与UITabBar...,默认值是UIRectEdgeAll,即:当前视图控制器里各种UI控件会忽略导航栏和标签的存在,布局时若设置其原点设置为(0,0),视图会延伸显示到导航栏的下面被覆盖。

3.1K20

ARKit 的配置-在您的AR项目的幕后

AR场景视图 ARKit模板已经放入对象库中可用的ARSCNView视图类中。此视图反映了相机看到的内容并将其显示在屏幕上。...UIKIT的 UIKit是开发iOS应用程序的基本框架,它可以集成标签,按钮,条形图和各种视图控制器等组件。 SCENEKIT 如前所述,SceneKit是我们选择的处理3D对象的渲染技术。...查看控制器类 在导入下方,ViewController已被声明为UIViewController类的一部分,并且与故事板中的视图相关。类具有属性,方法和协议,所有这些都在开发中被利用。...子类 再往下,你会发现已经预设了3个子类,viewDidLoad,viewWillAppear和viewWillDisappear。您可以根据视图显示时间提供说明。...viewDidLoad是视图已加载的时候,viewWillAppear在视图加载之前是正确的,而viewWillDisappear视图消失之前是正确的。

2.5K20

iOS 转场动画探究(二)

在博客上看到关于这个协议的翻译,肯定翻译,再吧一些地方自己总结了一下,直接写出来,对照着上面的理解一下这个协议:        1、 你可以使用一个转场协调器对象执行一个与转场相关的任务,它将分离动画控制器正在做的事...在转场期间,动画控制器对象负责把视图控制器的内容呈现在屏幕上,但是可能也有一些其他的可视元素同样需要被展示。比如,一个显示控制器可能想执行显示或者使一些装饰视图消失从视图控制器内容里分离出的动画。...3、使用转场协调器处理视图层次动画比在viewWillappear:方法中做出同样的改变,或者相同的方法在你的视图控制器中要好很多。你用这个协议中的方法所注册的block会确保执行一样的转场动画。...当presentation/dismissal一个视图控制器时,UIKit会自动创建一个转场协调器对象,并且给视图控制器的transitionCoordinator属性赋值(这一点在接下来的实例中,你会看的到的...}else{ //参照present动画的逻辑,present成功后,containerView的最后一个视图就是截图视图

1.3K70

iOS 转场动画探究(二)

在博客上看到关于这个协议的翻译,肯定翻译,再吧一些地方自己总结了一下,直接写出来,对照着上面的理解一下这个协议:        1、 你可以使用一个转场协调器对象执行一个与转场相关的任务,它将分离动画控制器正在做的事...在转场期间,动画控制器对象负责把视图控制器的内容呈现在屏幕上,但是可能也有一些其他的可视元素同样需要被展示。比如,一个显示控制器可能想执行显示或者使一些装饰视图消失从视图控制器内容里分离出的动画。...3、使用转场协调器处理视图层次动画比在viewWillappear:方法中做出同样的改变,或者相同的方法在你的视图控制器中要好很多。你用这个协议中的方法所注册的block会确保执行一样的转场动画。...当presentation/dismissal一个视图控制器时,UIKit会自动创建一个转场协调器对象,并且给视图控制器的transitionCoordinator属性赋值(这一点在接下来的实例中,你会看的到的...}else{ //参照present动画的逻辑,present成功后,containerView的最后一个视图就是截图视图

83340

iOS-控制器View的创建和生命周期

控制器View的创建 首先我们来看一下控制器view创建的流程图 控制器view加载.jpeg 从图中我们可以看出,在控制器view加载过程中有两个重要的方法loadView和viewDidLoad。...viewDidLoad 作用:一般我们会在这里做界面上的初始化操作,比如往view中添加一些视图等。 什么时候调用:每当view创建完毕的时候,最终都会调用viewDidLoad方法。...加载完毕 viewWillAppear: 控制器的view将要显示 viewWillLayoutSubviews: 控制器的view将要布局子控件 viewDidLayoutSubviews...: 控制器的view布局子控件完成 viewDidAppear: 控制器的view完全显示 viewWillDisappear控制器的view即将消失的时候...-> viewDidLayoutSubviews -> viewDidAppear -> viewWillDisappear -> viewDidDisappear 3.

1.3K60

iOS中UIPopoverController使用详解

iOS中UIPopoverController使用详解 一、引言         UIPopoverController是Pad设备中常用的一种视图控制器,其在UI表现上为在当前视图控制器上面弹出一个视图控制器...:(UIViewController *)viewController; 创建出控制器后,调用如下方法可以将控制器弹出: //这个方法将控制器以一个CGRect区域为基准弹出 /* UIPopoverArrowDirection...CGSize popoverContentSize; - (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated; //获取控制器当前是否正在展示...(nonatomic, readonly) UIPopoverArrowDirection popoverArrowDirection; //这个属性可以增强控制器的交互能力 /* 默认情况下,当视图控制器弹出时...,点击界面上的其他位置,视图控制器会被隐藏 如果需要当视图控制爱弹出时界面上的其他控件依然可以进行用户交互,则需要将这些UI控件设置进这个数组中 */ @property (nullable, nonatomic

1.7K20

iOS对UIViewController生命周期和属性方法的解析

7:viewDidLayoutSubviews:已经布局完成视图。 8:viewDidAppare:视图完成显示时调用。 9:viewWillDisappear视图将要消失时调用。...在执行过上述方法后,如果返回YES,系统还会在执行如下一个方法,作为跳转前的准备,我们可以在这个方法中进行一些传值操作,这个方法无论使我们手动进行跳转还是storyboard中自动跳转,都会被执行: -...在Storyboard中两个控制器间建立一个segue联系,我们可以取一个名字: ?...1、parentViewController         UIViewController里面封装了一个数组,可以存放其ViewController,系统中使用的例子就是导航和tabBar这类的控制器...UIModalTransitionStyleCrossDissolve,//溶解     UIModalTransitionStylePartialCurl ,从下向上翻页 }; 除了跳转的效果,还有一个属性可以设置弹出

2.9K20

iOS的MVC框架之控制层的构建(下)

)、视图将要从窗口删除(viewWillDisappear)、视图已经从窗口删除(viewDidDisappear)、视图被销毁(viewDidUnload,这个方法在iOS6.0以后将不起作用了)、控制器被销毁...而这个UITableView又刚好是一个可选的显示视图。同时我们又在视图控制器的dealloc中对这个UITableView的delegate做了置为nil的处理。...采用接口和消息转发 视图控制器通过对分类扩展来实现视图构建的拆分,代码还是属于视图控制器的一部分。...但是在实际中有可能UITableViewCell要显示的东西非常之多,而且展示的逻辑也比较复杂,如果这些代码都在视图控制器来处理的话那么势必造成控制器代码膨胀。...,并且这里面更新视图显示样式等等。

4.4K30

iOS视频播放的基本方法

View上才能显示视频,使用步骤如下: 第一步:引用MediaPlayer框架,声明视图控制器属性PlayerController #import ...,因此它是通过模态视图弹出的方式显示视频的。...AVPlayerViewController有两种播放视频的方式: 第一种:直接弹出模态视图控制器播放 //步骤1:获取视频路径 NSString *webVideoPath = @"http://api.junqingguanchashi.net...为了满足这一条件,我们可以将AVPlayerViewController作为属性,也可以使用addChildViewController方法将其作为当前视图控制器视图控制器,示例代码如下: //步骤...不能作为局部变量被释放,否则无法播放成功 //解决1.AVPlayerViewController作为属性 //解决2:使用addChildViewController,AVPlayerViewController作为视图控制器

4.2K20
领券