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