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

在视图出现之前,为什么viewDidAppear在UITabBarController exec中?

在iOS开发中,UITabBarController是一个常用的控制器,用于管理多个子视图控制器。当UITabBarController的视图加载完成后,系统会调用其viewDidAppear方法,以通知开发者视图已经出现在屏幕上。

viewDidAppear方法之所以在UITabBarController的exec中调用,是因为UITabBarController是一个容器控制器,它负责管理多个子视图控制器的切换和显示。当UITabBarController的视图加载完成后,系统会先调用UITabBarController的viewDidAppear方法,然后再调用当前显示的子视图控制器的viewDidAppear方法。

这样设计的目的是为了确保在UITabBarController的视图出现之前,当前显示的子视图控制器的viewDidAppear方法已经被调用。这样可以保证在子视图控制器的viewDidAppear方法中执行一些需要在视图完全显示后才能进行的操作,例如加载数据、更新UI等。

在UITabBarController中,exec是一个内部方法,用于执行子视图控制器的切换和显示操作。在exec方法中,系统会先调用UITabBarController的viewDidAppear方法,然后再调用当前显示的子视图控制器的viewDidAppear方法。

总结起来,viewDidAppear在UITabBarController的exec中调用是为了确保在视图出现之前,当前显示的子视图控制器的viewDidAppear方法已经被调用,以保证在子视图控制器的viewDidAppear方法中执行一些需要在视图完全显示后才能进行的操作。

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

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

相关·内容

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

UITabBarController类       选项卡类允许用户多个视图控制器之间移动并在屏幕的底部可定制该栏。...一、创建UITabBarController 常见的应用程序委托类的applicationDidFinishLaunching:方法创建,这通常可为应用窗口提供根视图。...[window addSubview:tabBarController.view];   当然应用程序委托AppDelegate类创建UITabBarController,相当于创建了一个基于...实现UITabBarControllerDelegate委托的视图控制器重写init方法来自定义UITabBarItem条目。...控制器加载视图过程 当调用视图控制器的view属性时,视图控制器会先调用loadView方法加载视图,因此,可以loadView方法创建所有的视图,这是比较好的编程惯例。

5.1K50

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

千万不要看到方法名中间出现了view就以为这是视图的方法。这些都是控制器的生命周期。...我们再来看看viewDidAppear的描述: Called when the view has been fully transitioned onto the screen 意思是视图出现在屏幕上之后才调用...下面做一个小测试,打印不同方法执行的过程,界面的长宽属性如何,结果如下: //viewDidLoad w:320.000000 h:568.000000 //viewWillAppear w:...Default does nothing 对象的视图已经消失、被覆盖或是隐藏时调用. UIViewController类提供一些方法,用来判断为什么view外观发生更改。...,与上面被其它视图控制器显示对应,如信息录入完成,返回之前视图控制器)。

1.4K30
  • 从 0 到 1 搭建技术台之 iOS 可视化埋点实践

    自去年开始,台话题的热度不减,很多公司都投入到台的建设,从战略制定、组织架构调整、协作方式变动到技术落地实践,每个环节都可能出现各种各样的问题。...例如 UITabBarController-UINavigationController(1)-MyViewController(2) 括号的数字代表控制器父控制器的索引。...通常,元素标识由三部分组成 元素页面视图的路径 路径由视图树根节点开始,到该元素节点的父节点为止。...”0”表示其视图中的索引,括号内的 “click me” 来自其 currentTitle 的值。...系统内置的视图,如 UITransitionView 会在运行时修改其子元素的索引,造成元素路径发生变化,因此进行路径追溯时,到达 UIViewController (注意不含 UITabBarController

    1.1K20

    iOS页面加载时间测试初探

    页面加载时间能反映代码,创建页面视图是否有过度绘制或者绘制不合理导致创建视图时间过长的情况。 UIViewController是什么?...页面生命周期 viewDidLoad: 载入完成,可以进行自定义数据以及动态创建其他控件 viewWillAppear: 视图即将出现在屏幕之前 viewDidAppear: 视图已经屏幕上渲染完成...viewWillDisappear: 视图即将从屏幕上移除 viewDidDisappear: 视图已经被从屏幕上移除 dealloc: 视图被销毁 image 测试方法 view基类打点 一般项目代码都会继承...:33:14 xinxide-iPhone xxxxx[2195] : page-test-total:567.00 hook机制 第一种方法在你需要知道view的基类叫什么名字并且代码打点...所以想使用拦截viewDidLoad和viewDidAppear这两个函数,就拦截器打印时间就可以了。

    1.9K30

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

    之后 viewDidAppear 之前执行,这个方法会被调用多次,如果在此创建视图,可能会创建多个,而且这个方法执行耗时操作依然会造成跳转卡顿的问题。...一个很常见的问题,我们需要在VC被销毁的时候处理一些事情,可是 viewWillDisappear 不管是入栈新的视图还是出栈当前视图都会被调用,无法判断,结合我之前说的原理,我们可以利用下面这个方法判断当前...但是VC,当前UIView的是 viewDidLoad 执行后才初始化好的,所以我们会见到这样一个Bug,VC初始化语句后面调用 一个 VC的绘制UI的方法,你会发现根本没有效果,这就是因为,VC...中跟试图的初始化是需要时间的,你VC根试图初始化之前调用绘制UI的方法当然是不会有效果出现的。...** 2、**若使用calayer绘图,只能在drawInContext: (类似鱼drawRect)绘制**,或者delegate的相应方法绘制。

    1.9K30

    iOS学习——获取当前最顶层的ViewController

    iOS开发过程,我们经常性会需要获取当前页面的ViewController,然后利用ViewController进行一些操作,例如在最顶层的ViewController上展示一个UIAlertController...,或者最顶层的ViewController上present另一个ViewController,或者进行其他操作。...寻找的过程,要分别考虑当前ViewController是UITabBarController和UINavigationController的情况,同时还要考虑到当前ViewController是否通过...class]]) { // 根视图UITabBarController currentVC = [self getCurrentVCFrom:[(UITabBarController...[UIApplication sharedApplication].keyWindow.rootViewController获取到的是项目的根视图,结合可能用到UITabBarController或者UINavigationController

    6.6K50

    iOS14开发-UIViewController

    介绍 UIViewController 可以理解为 App 的界面,负责管理 UIView 显示的内容和用户的交互,主要有以下作用: 负责创建和管理 UIView。 响应用户与视图的交互。...顺向传值只需要在目标控制器声明需要接收的参数,然后源控制器中进行传值即可。 storyboard 方式。 代码方式。...被代理对象(需要传值的 UIViewController) 声明协议,协议定义传值方法,方法的参数个数与类型取决于需要传值的个数和类型。 UIViewController 声明一个代理属性。...需要传值的地方调用代理属性的方法完成传值。 代理对象(接收值的 UIViewController) 实现被代理对象声明的协议,实现协议的方法,拿到传过来的值进行使用。...需要传值的地方调用闭包完成传值。 接收值的 UIViewController 实现需要传值的 UIViewController 的闭包属性,闭包的实现拿到传过来的值进行使用。

    2.4K20

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

    除非你没有使用xib文件创建视图 4、viewDidLoad载入完成,可以进行自定义数据以及动态创建其他控件 5、viewWillAppear视图出现在屏幕之前,马上这个视图就会被展现在屏幕上了 6、...viewDidAppear视图已在屏幕上渲染完成 当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反 1、viewWillDisappear视图将被从屏幕上移除之前执行 2、viewDidDisappear...视图已经被从屏幕上移除,用户看不到这个视图了 3、dealloc视图被销毁,此处需要对你init和viewDidLoad创建的对象进行释放 关于viewDidUnload:发生内存警告的时候如果本视图不是当前屏幕上正在显示的视图的话...1)- (void)viewDidLoad; 一个APP载入时会先通过调用loadView方法或者载入IB创建的初始界面的方法,将视图载入到内存。...4) - (void)viewDidAppear:(BOOL)animated; 有时候,由于一些特殊的原因,我们不能在viewWillApper方法里,对视图进行更新。

    1.9K110

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

    (如,UINavigationController, UITabBarController)动画没做完,然后又开始新的动画.。...彻底解决方法是:         第一个被push的VC的viewDidAppear方法再去push第二个VC。...我们在手势识别只需要告诉这个类的实例当前的状态百分比如何,系统便根据这个百分比和我们之前设定的迁移方式为我们计算当前应该的UI渲染,十分方便。...刚才demo的基础上,这次我们用一个向上划动的手势来吧之前呈现的ModalViewController给dismiss掉~当然是交互式的切换,可以半途取消的那种。         ...,弄明白之前会有些confusing),因此这些效果使用起来非常方便,相信一般项目中是足够使用的了。

    57630

    iOS开发遇到的一些小问题记录

    1. tableView下方出现莫名的空白 tableFooterView问题 一般来说,tableview会默认有一个footerview 解决:视图加载时将这个footerview设为没有高度或者是空...重新以视图方式打开,提示丢失文件,画面可以看到一个?图片。重新设置一张图片即可! 3. performSegue不响应问题 测试segue的时候,直接使用代码调用,结果始终没有效果。...改成用 UIButton Action的方式有效,仔细搜索并分析发现问题主要是 viewdidload周期内的segue会被最后更新的UI视图覆盖掉、也就是当前页面的主视图。所以看不出效果。...,并且偶尔会直接造成崩溃 出现这个问题主要原因是,通常的UI界面(UIViewController)的内容都是主线程运行、而很多其他的功能 诸如支付队列等 是在后台线程运行、主线程是UI阻塞的,...动态切换tableViewCell类型/模板时没有反应 需要在切换tableViewCell类型之前先定义好style 否则会没有效果

    80710

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

    例如,很多人习惯keyWindow上添加一个自定义浮层视图,但是,当自己或者其它第三方框架曾经调高过其它自定义UIWindow属性windowLevel,或者有其它同级windowLevel的UIWindow...为App初始化一个默认UIWindow对象 AppDelegate.m需要初始化一个window属性,作为后面往App添加视图的容器 1....假设APP的keyWindow对象为uiWindow,则uiWindow.rootViewController为UITabBarController对象(也只有UIWindow可以用点语法设置根视图)。...class]]) { UITabBarController *tabbar = (UITabBarController *)rootVC; NSInteger index...自定义的UIWindow添加自定义视图 假设想为一个APP添加一个手势验证的页面,当进入APP弹出这个手势验证页面。

    7.9K10

    iOS 开发之路(WKWebView内嵌HTML5之图片上传) 五

    问题:webview上点击选择照片/相机拍摄,就会出现whose view is not in the window hierarchy这个错误。...stackoverflow上有这个错误的解释,但是我们并不能采取相应的方法去解决,因为咱们这个新弹出的UIPictureView并不是由我们决定在viewDidLoad还是viewWillAppear出现的...解决方案:比方说三个视图(NavagationViewController\mainViewController\webViewController)将NavagationViewController设置为根视图...这里出错的原因是因为wkwebview的装载千万不能放在viewDidAppear,必须放到viewDidLoad里。   ...这个问题我stackoverflow上查了巨久都没找到问题,然后越查越远,问题被我搞得巨复杂,最后apple develop中心看到一个人的帖子才解决的。

    3K10

    一个Bug所引发的方法交换小讨论

    最近鄙人在项目中接入了阿里云的移动数据分析功能,这个移动数据分析SDK中提供了统计页面出现与页面消失的接口,所以呢我就给UIViewController建了一个分类,然后分类复写load方法,并在该方法勾住...该例子,体现出来的问题就是,这两个地方的方法交换都不会起作用。那么为什么不会起作用呢,且听我慢慢道来。 首先我先提出我的一个疑惑。...通常而言,对于一个类的方法,如果在该类的分类中有重写该方法,那么该方法原类的实现就会被分类的实现覆盖;如果一个类的方法,该类的多个分类中都有重写,那么最终会执行最后一个加载到内存的分类的方法...但是为什么load方法同一个类的不同分类重写,每一个分类中都会被调用呢?...如果某类原类中有复写该方法,分类也复写了该方法,那么原类的方法实现就会被分类的方法实现覆盖。 如果多个分类中都复写了该方法,那么程序就会执行最后一个加载到程序的分类的方法。

    60830

    Swift-MVVM 简单演练(三)

    HQMainViewController之前我们添加了监听的方法 class HQMainViewController: UITabBarController { override...我选择Button的Extension搞定这个。...系统提供了一个方法didMoveToWindow,字面上我们直接可以翻译出它的意思,就是视图被添加到window上,表示视图已经显示,和Controller里面的viewDidAppear方法类似。...,但是出现的方式有点和我们所想的不一样,我们是希望控件已经被创建到我们之前代码写好的位置,然后再通过动画,移动到下图中最终的位置。...HQNewFeatureView() : HQWelcomeView() HQNewFeatureView,进行布局,我写UI布局套路都比较单一,懒加载控件,extensionsetupUI,如果有按钮的监听方法

    2.6K30

    iOS多控制器之UINavigationController&UITableBarController1. 多控制器2. UINavigationController3. UITableBarCont

    UITableBarController UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换...UITabBarController的创建过程可以参考UINavigationController ? Paste_Image.png 3.1....UITabBarButtonUITabBar得位置是均分的,UITabBar的高度为49。 UITabBar的结构⼤大致如下图所示: ?...Paste_Image.png 7.2.3 往UITabBarController添加子控制器 有两种方法UITabBarController添加子控制器 : [tb addChildViewController...:c1]; tb.viewControllers=@[c1,c2,c3,c4]; 注意:展示的顺序和添加的顺序一致,和导航控制器不同,展现在眼前的是导航控制器的根视图控制器也就是第一个添加到导航控制器上的视图

    1.3K40

    Objective-C 的运行时中最具争议的黑魔法:Method Swizzling

    例如:我们想要在一款 iOS app 追踪每一个视图控制器被用户呈现了几次: 这可以通过每个视图控制器的 viewDidAppear: 方法添加追踪代码来实现,但这样会大量重复的样板代码。...继承是另一种可行的方式,但是这要求所有被继承的视图控制器如 UIViewController, UITableViewController, UINavigationController 都在 viewDidAppear...视图控制器的生命周期,响应事件,绘制视图或者 Foundation 框架的网络栈等方法插入代码都是 method swizzling 能够为开发带来很好作用的例子。...到此我们已经知道为什么,应该在哪些地方使用 method swizzling,下面介绍如何使用 method swizzling: +load vs +initialize swizzling应该只+...做好准备,使用这个黑魔法走得更远,不要让程序反而出现不可思议的行为。

    46310

    VCTransitionsLibrary –自定义iOS交互式转场动画的库

    CocoaPods 安装 pod "VCTransitionsLibrary" 手动安装 把文件 AnimationControllers 和 InteractionControllers 文件夹下所有代码复制到工程即可...交互控制器 – 这个类是用来管理交互的-那些通常由某个手势空控制的交互,允许用户通过滑动,轻扫或执行其他操作来实现两个视图控制器的导航.必须指出的是,交互控制器允许导航取消,例如,一个用户可以正在导航至某一页面时...协议被用来模态控制器显示/隐藏时提供一个动画控制器.当一个视图控制器被模态显示或隐藏时,它的transitioningDelegate属性用来提供UIViewControllerTransitioningDelegate...为了给动画一个合适的方向,你可以比较两个视图控制器的索引: - (id )tabBarController:(UITabBarController...交互控制器负责给视图添加手势,并负责在用户使用某个手势时进行相应地导航操作.

    1.6K60
    领券