Apple Watch应用程序中有两个WKInterfaceController
子类。
第一个是另一个的入口,它们与Interface Builder的关系是nextPage
。
对于每个InterfaceController中的awakeWithContext
,willActivate
和didDeactivate
方法,我会在观看应用启动时将它们全部打印出来。
我得到了这个输出:
awakeWithcontext -> First
awakeWithContext -> Second
willActivate -> First
willActivate -> Second
didDeactivate -> Second
然后我滑到下一个InterfaceController:
willActivate -> Second
didDeactivate -> First
现在的问题是:
只要启动,Watch App中所有InterfaceControllers的所有awakeWithContext
方法都会被触发吗?
willActivate
方法怎么样?
答案 0 :(得分:7)
watchOS应用程序的生命周期如下所述。
<强> awakeWithContext
强>
初始化页面时,将调用awakeWithContext
。这是第一个被调用的方法,还没有显示UI。
您应该在awakeWithContext
中执行更新表视图的模型数组,设置属性等操作。此方法与简单类(init()
)中的初始值设定项非常相似,但这次是WKInterfaceController
s。
第一个问题的答案:
一旦watchOS,就会在所有页面上调用
awakeWithContext
应用程序启动。
<强> willActivate
强>
当即将显示界面控制器时,将调用willActivate
。
您应该更新标签值,操作以及与那里的视图元素相关的任何其他内容。
你的第二个问题的答案:
只要watchOS app,就会在所有页面上调用
willActivate
启动,但与awakeWithContext
相反,这将被调用 一旦你查看控制器(换句话说,当你 导航到所需的界面。)
首次启动应用时,系统会调用所有控制器didDeactivate
,当前除外,当转到另一个时,willActivate
将在didDeactivate
之前调用被称为第一个。
所以生命周期是:
所有观看次数的1- awakeWithContext
所有观点的2 willActivate
所有视图的3- didDeactivate
,第一个视图除外(当前视图)
当滑到第二个时:
第二个视图的1- willActivate
第一个视图的didDeactivate
答案 1 :(得分:0)
awakeWithContext
。启动后,您的观看应用中的所有网页都会调用此方法。
willActivate
。调用第二个接口控制器willActivate
后跟didDeactivate
的原因是因为它是屏幕上的下一个页面。发生这种情况是为了帮助加载下一个接口控制器的相关数据,因为它很快就会出现在屏幕上。
因此,如果您有第3页接口控制器,当第二个接口控制器在屏幕上时,将调用willActivate
后跟didDeactivate
。
willActivate
上的Apple Doc。手表上的Page-based navigation可能没有明确说明这一点,但它们总是有助于阅读。