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

如何在添加到UIWindow后销毁VC?

在添加到UIWindow后销毁VC有多种方法,具体取决于你的需求和使用的开发框架。

  1. 使用视图控制器的生命周期方法:在视图控制器的viewWillDisappear:viewDidDisappear:方法中执行销毁操作。这些方法会在视图控制器的视图即将或已经从屏幕上消失时被调用。

示例代码:

代码语言:txt
复制
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    // 执行销毁操作
    self.removeFromParentViewController()
}
  1. 使用强引用和弱引用:在创建并添加视图控制器到UIWindow后,通过弱引用持有视图控制器的实例,并在需要销毁时,将该引用设为nil。这样可以让系统自动回收视图控制器的内存。

示例代码:

代码语言:txt
复制
// 在合适的地方创建并添加视图控制器到UIWindow
let viewController = YourViewController()
window.addSubview(viewController.view)
window.rootViewController = viewController

// 在需要销毁时,将弱引用置为nil
viewController = nil
  1. 使用闭包回调:在创建并添加视图控制器到UIWindow时,通过闭包回调传递视图控制器的引用,并在需要销毁时调用闭包方法,将该引用置为nil。

示例代码:

代码语言:txt
复制
class YourViewController: UIViewController {
    var dismissCallback: (() -> Void)?
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        // 在视图消失时执行闭包回调
        dismissCallback?()
    }
}

// 在合适的地方创建并添加视图控制器到UIWindow
let viewController = YourViewController()
viewController.dismissCallback = {
    viewController = nil
}
window.addSubview(viewController.view)
window.rootViewController = viewController

请注意,上述示例代码仅为演示目的,实际使用时应根据具体情况进行适当调整。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供弹性计算服务,可满足各种规模的应用需求。产品介绍链接
  • 云数据库MySQL版:稳定可靠的关系型数据库服务,支持高可用、可扩展和自动备份等特性。产品介绍链接
  • 云存储(COS):提供高可用、低成本、强安全的对象存储服务,适用于图片、音视频、日志等数据存储。产品介绍链接
  • 人工智能机器翻译(AI翻译):基于腾讯AI技术的机器翻译服务,支持多语种互译和自定义翻译模型。产品介绍链接
  • 物联网开发平台(IoT Explorer):提供设备连接管理、数据采集与分析、远程控制等功能,帮助实现物联网应用。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS开发·UIWindow与视图层级调整技巧(makeKeyWindow,resignKeyWindow,makeKeyAndVisible,keyWindow,windowLevel,UIWind

后来改变过显示状态(.hidden=NO,makeKeyAndVisible等),而且又没有 设将其设置为keyWindow,结果导致正在显示的UIWindow不是keyWindow,从而导致添加到keyWindow...但在手势验证完,务必销毁这个自定义的UIWindow,否则可能导致看不见的UIWindow越积越多。 1....销毁自定义UIWindow 自定义视图用完,记得要销毁自定义的UIWindow,否则导致APP以后会有越来越多没用到的UIWindow,即使再也没有显示过它们,但是可以用调试工具看到许多废弃的window...如果,之前UIWindow的hidden = NO,设置新UIWindow的hidden将旧UIWindow覆盖,旧UIWindow的hidden属性依旧为NO。...UIWindow,但实际操作是把自己的视图添加到keyWindow上。

7.9K10

IOS开发系列——UIView专题之一:UIWindow

iOS程序启动完毕,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了。...2.把view添加到uiwindow 创建一个控制器,把view添加到uiwindow上面(有两种方式) (1)直接将控制器的view添加到UIWindow中,并不理会它对应的控制器 [self.window... addsubview:vc.view]; (2)设置uiwindow的根控制器,自动将rootviewcontroller的view添加到window中,负责管理rootviewcontroller...问题描述1:当view发生一些事件的时候,通知控制器,但是控制器已经销毁了,所以可能出现未知的错误。 问题描述2:添加一个开关按钮,让屏幕360度旋转(两者的效果不一样)。...在该方法中,会创建一个Window,然后创建一个控制器,并把该控制器设置为UIWindow的根控制器,接下来再将window显示出来,即看到了运行显示的界面

87630
  • iOS-UIWindow详解

    iOS程序启动完毕,创建的第一个视图控件就是UIWindow,接着创建控制器的View,最后将控制器的View添加到UIWindow上,于是控制器的View就显示在屏幕上了。...self.window makeKeyAndVisible]; return YES; } 窗口显示注意点: 我们看到系统为我们创建的window属性是strong强引用,是为了不让窗口销毁...[self.window addsubview:rootVc.view];可直接将控制器的view添加到UIWindow中,并不理会它对应的控制器,但是这种方法违背了MVC原则,当我们需要处理一些业务逻辑的时候就很麻烦了...= [[ViewController alloc] initWithNibName:@"VC" bundle:nil]; //vc.view.backgroundColor = [UIColor...redColor]; self.window.rootViewController = vc; [self.window makeKeyAndVisible];

    2K40

    基础篇-UIApplication、UIWindow以及程序的启动流程看我就够了

    一个iOS程序启动创建的第一个对象就是UIApplication对象,且只有一个(通过代码获取两个UIApplication对象,打印地址可以看出地址是相同的)。...iOS 中的状态栏设置(iOS9 中跟状态栏有关的已经过期,状态栏交给控制器UIViewController管理了) 应用界别的跳转 (openURL) 一 、设置应用程序图标右上角的红色提醒数字(QQ...一般在该方法中恢复应用程序的数据,以及状态 - (void)applicationWillEnterForeground:(UIApplication *)application # 应用程序即将被销毁的时候会调用该方法...iOS程序启动完毕,创建的第一个视图控件就是UIWindow,接着创建控制器的View,最后将控制器的View添加到UIWindow上,于是控制器的View就显示在屏幕上了。...= [[ViewController alloc] initWithNibName:@"VC" bundle:nil]; self.window.rootViewController = vc;

    1.6K20

    程序启动的完整过程

    ) 创建UIWindow 创建和设置UIWindow的rootViewController 显示窗口 窗口(UIWindow) 一种特殊的UIView,一个app中至少有一个UIWindow iOS...启动完毕创建的第一个视图就是UIWindow 接着创建控制器,再把控制器的View加到UIWindow上显示出来 在- didFinishLaunchingWithOptions:方法中代码创建控制器...*VC = [[UIViewController alloc] init]; //加到窗口的跟控制器中 self.window.rootViewController = VC; //把控制器的View...viewDidDisappear(view从window上完全移除) 当有内存警告时 didReceiveMemoryWarning(当收到内存警告) viewWillUnload(view即将销毁的时候...) 销毁view,首先不在视野中得view viewDidUnload(view销毁完毕) 处理应用程序的一些生命周期方法 // 程序启动完成的时候调用 // __func__:表示当前的方法在哪个类里面调用

    1.5K150

    UIViewController生命周期

    有的程序经过特殊的请求可以长期处于Backgroud状态。 Suspended挂起:程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。...applicationWillResignActive:在应用程序将要由活动状态切换到非活动状态时候,要执行的委托调用, 按下 home 按钮,返回主屏幕,或全屏之间切换应用程序等。...2、UIWindow的主要作用有: 1.作为UIView的最顶层容器,包含应用显示所有的UIView; 2.传递触摸消息和键盘事件给UIView; 把view添加到uiwindow 3、把view...添加到uiwindow上面 (1)直接将控制器的view添加到UIWindow中,并不理会它对应的控制器 [self.window addsubview:vc.view]; (2)设置uiwindow...=vc]; 4、KeyWindow 当前app可以打开的多个window 系统状态栏其实就是一个window ,程序启动的时候创建的默认的window ,弹出键盘也是一个window ,alterView

    1.9K10

    【IOS开发基础系列】UIView专题

    iOS程序启动完毕,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了。...view添加到UIWindow上。...2.把view添加到uiwindow         创建一个控制器,把view添加到uiwindow上面(有两种方式)     (1)直接将控制器的view添加到UIWindow中,并不理会它对应的控制器...    [self.window addsubview: vc.view];     (2)设置uiwindow的根控制器,自动将rootviewcontroller的view添加到window中,负责管理...在该方法中,会创建一个Window,然后创建一个控制器,并把该控制器设置为UIWindow的根控制器,接下来再将window显示出来,即看到了运行显示的界面。

    62830

    iOS开发--UIWindow与程序启动原理与两种创建控制器的方法

    Paste_Image.png UIWindow UIWindow是一种特殊的View 1.iOS启动完毕,创建的第一个视图控件就是UIWindow。...2.接着创建控制器的View, 3.然后将控制器的view添加到UIWindow上 4.于是控制器的View就显示在屏幕上了。...Paste_Image.png 举例:如果需要看到键盘,必须把键盘添加到一个View上面去 首先了解什么是窗口:键盘、状态栏是窗口 窗口层级关系: // 窗口是有层级关系 // UIWindowLevelNormal...Paste_Image.png 2.修改Xib描述为控制器的类型,就可以连线了。 ?...Paste_Image.png 设置控制器的View = vc.view.alpha = 0; 那么在Windows上添加的按钮可以点击, 如果设置控制器的View的颜色为透明色,但是系统认为只是几乎透明

    1.2K20

    UINavigationController

    可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型例子就是系统自带的“设置”应用 UINavigationController的使用步骤 初始化UINavigationController 设置UIWindow...比如按钮),自动执行Segue,自动完成界面跳转 按住Control键,直接从控件拖线到目标控制器 如果点击某个控件,不需要做任何判断,一定要跳转到下一个界面,建议使用“自动型Segue” 手动型:...首先创建一个当前控制器将要跳转到的控制器 YLViewController *VC = [[YLViewController alloc] init]; //2.把Modal的控制器的...View添加到窗口上,把之前的窗口上的View移除 UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;...[keyWindow addSubview:VC]; //3.改形变属性,控制一个控件的位置(translation),尺寸(scale),角度(rotation) VC.view.transform

    1.4K60

    View编程指南(二)

    这是因为window(所有view)不会在边界矩形外接收触摸事件。由于默认情况下,view不会被剪切到window边界,所以view仍然可见,但是事件不能到达它们。...如果你使用view contoller,VC应该自动处理你的view的大小。...将内容添加到Window 每个window通常都有一个root view对象(由相应的view controller管理),其中包含代表您的内容的所有其他view。...如果在从其nib文件加载window时设置此属性,则UIKit会自动将相关VC的view安装为window的root view。此属性仅用于安装root view,不用于window与VC进行通信。...注意:如果window的rootview由容器view控制器(选项卡栏控制器,导航控制器或分割view控制器)提供,则不需要自行设置view的初始大小。

    81310

    iOS14开发-触摸与手势识别

    // 触摸结束前,某个系统事件中断了触摸,电话来电 open func touchesCancelled(_ touches: Set, with event: UIEvent?)...事件传递 当 iOS 程序中发生触摸事件,系统会将事件加入到 UIApplication 管理的一个任务队列中。 UIApplication 取出最前面的事件传递给 UIWindow。...UIWindow 接收到事件,首先判断自己能否响应触摸事件。如果能,那么 UIWindow 会从往前遍历自己的子 UIView,将事件向下传递。...-> Bool { } UIApplication 调用 UIWindow 的hitTest方法将触摸事件传递给 UIWindow,如果 UIWindow 能够响应触摸事件,则调用其子 UIView 的...将手势添加到需要的 UIView 上。每个手势只对应一个 UIView,当屏幕触摸在当前 UIView 里时,如果手势和预定的一样,回调方法就会调用。

    2.3K20

    一个BUG的发现、定位和解决

    在键盘出现时弹出UIAlertView的提示,键盘会收起,UIAlertView消失,键盘会再次弹出,是一次正常的表现。...2、把app的工程设置复制到demo,把对输入框的属性设置同样复制到demo,demo依旧正常; 3、把demo代码复制到app,并把app的rootViewController赋值为demo中的VC...仔细排插Service类的属性,发现里面有一个属性的是继承UIWindow并且level比UIWindowLevelStatusBar高。...在iOS 11,如果UIAlertView弹出时,存在windowLevel 大于 UIWindowLevelNormal 的UIWindow,就会触发这个键盘无法弹出的BUG。...6、问题修复 1、保证app中,没有常驻的UIWindow; 2、修复键盘无法弹出时,maskView无法消除的BUG; 3、UIAlertView在后续的版本替换掉; 总结 这次问题从产生、复现、

    1.5K70

    iOS 小技能: Responder Chain(响应者链)【上篇】

    当手指离开屏幕时,系统会销毁相应的UITouch对象 提示:iPhone开发中,要避免使用双击事件!...响应触摸事件的都是屏幕上的界面元素,而且必须是继承自UIResponder类的界面类(包括各种常见的视图类及其视图控制器类,UIView和UIViewController)才可以响应触摸事件。...当触摸事件发生,系统会将触摸事件以UIEvent的方式加入到UIApplication的事件队列中,UIApplication将事件分发给根部的UIWindow去处理,UIWindow则开始调用hitTest...4.2.响应者链 通过命中测试找到命中者,任务并没有完成,因为最终的命中者不一定是事件的响应者。...所谓的响应就是开发中为事件绑定的一个触发函数,事件发生执行响应函数里的代码,例如通过addTarget方法为按钮的单击事件绑定响应函数,在按钮被单击能及时执行想要执行的任务。

    1.1K30
    领券