请问下,我现在有一个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进行验证。楼主自己实际情况请参考上面进行分析~