请问下,我现在有一个UIScrollView,还有一个ViewControll的数组,然后我把这个数组遍历用addChildViewController添加到了UIScrollView,然后设置UIScrollView的contentSize是用ViewControll数组*屏幕宽度,达到滑动切换ViewControll。但是viewWillAppear不运行。求解释
PHP中文网2017-04-17 13:57:32
你這麼做相當於把所有View一次性都加載到了UIScrollView上,只不過有些是在屏幕上,有些是超出了屏幕,它們是一直顯示的,只是你看不到,壓根就沒有Appear這個動作,所以不會走ViewWillAppear
阿神2017-04-17 13:57:32
樓上的答案應該是對的,我只是來補充的。
對於這個的處理,你可以使用UIScrollView本身的代理方法,當拖曳完成後的方法- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:
來判斷當前的切換,然後將你再ViewWillAppear
的方法放在裡面執行就OK了。
伊谢尔伦2017-04-17 13:57:32
答應是必須會呼叫~
這裡說下呼叫時機(對於ChildController來說,畢竟是一個完整的是UIViewController週期其中一個步驟):viewWillAppear, viewDIdAppear
在執行
[self.view addSubview:childController.view];
後呼叫。
反之,viewWillDisappear, viewDidDisappear
在執行
[childController.view removeFromSuperview];
後呼叫。
如果不信可以自己寫一個簡單的Demo,增加一個如下的操作:
cv *c = [cv new];
[self addChildViewController:c];
[self.view addSubview:c.view];
[c didMoveToParentViewController:self];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[c.view removeFromSuperview];
});
在cv 重寫viewWillAppear: viewWilDisappear:
打上LOG進行驗證。
樓主自己實際狀況請參考上面分析~