搜尋

首頁  >  問答  >  主體

ios - viewWillAppear不运行。

请问下,我现在有一个UIScrollView,还有一个ViewControll的数组,然后我把这个数组遍历用addChildViewController添加到了UIScrollView,然后设置UIScrollView的contentSize是用ViewControll数组*屏幕宽度,达到滑动切换ViewControll。但是viewWillAppear不运行。求解释

怪我咯怪我咯2773 天前728

全部回覆(3)我來回復

  • PHP中文网

    PHP中文网2017-04-17 13:57:32

    你這麼做相當於把所有View一次性都加載到了UIScrollView上,只不過有些是在屏幕上,有些是超出了屏幕,它們是一直顯示的,只是你看不到,壓根就沒有Appear這個動作,所以不會走ViewWillAppear

    回覆
    0
  • 阿神

    阿神2017-04-17 13:57:32

    樓上的答案應該是對的,我只是來補充的。


    對於這個的處理,你可以使用UIScrollView本身的代理方法,當拖曳完成後的方法- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:
    來判斷當前的切換,然後將你再ViewWillAppear的方法放在裡面執行就OK了。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦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進行驗證。

    樓主自己實際狀況請參考上面分析~

    回覆
    0
  • 取消回覆