84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
请问下,我现在有一个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进行验证。楼主自己实际情况请参考上面进行分析~