2013-08-03 108 views
0

我的應用程序中有兩個視圖控制器,例如vc1和vc2。這兩個視圖控制器作爲scrollView的子視圖,因此用戶可以滾動屏幕切換視圖。但是,簡單的實現有一個問題:vc1和vc2的viewWillAppear方法只被調用一次。所以我想實現我的滾動容器視圖控制器,它可以正確調用viewWillAppear方法,請告訴我如何實現它。如何製作自定義滾動容器視圖控制器?

回答

1

我不知道你正在嘗試做的,但我認爲一個簡單的UITableView或UICollectionView可能會更好你是因爲他們擁有數據源方法,當視圖在屏幕上顯示時會自動調用。當你需要返回一個UITableViewCell或UICollectionViewCell時,你可以更新你的兩個視圖。

0

我不確定這是否可行,但我認爲您可以檢查vc1和vc2的框架是否在scrollView的委託方法中使用了屏幕邊界。

我很確定每當scrollView被滾動時都會調用一個方法。在這種方法中,你可以檢查

//put this in your .h or something 
BOOL vc1IsVisible = true; 

//in the scrollView delegate-method that is called upon scrolling 
if([self isInsideView:vc1]) 
{ 
    if(!vc1IsVisible) 
    { 
     vc1IsVisible = true; 
     [vc1 viewDidAppear:NO]; //or whatever it is for animation 
    } 
} 
else 
{ 
    if(vc1IsVisible) 
     vc1IsVisible = false 
     //and viewDidDisappear? 
} 

,然後某處創建一個方法,像這樣

-(BOOL)isInsideView:(UIViewController*)vc 
{ 
    //Check if vc.origin.y is greater than scrollView.size.height or something maybe? 
    //You can probably also try using the scrollView's contentOffset and use that 
    //relative to the viewController's sizes. 
    //if the viewControllers bounds are withing the scrolls bounds, return YES; 
    //else, return NO; 
} 

對不起,我真的不能剛纔測試任何東西。如果你還沒有弄明白,也許我會做點什麼,然後更新答案。你需要用兩者來完成。我相信你可以想出一個更好的方法來將這兩種方法都包含在這個方法中,或者甚至包含一個變量。

0

由於您使用ViewController通過將其添加滾動視圖的子視圖,通過添加ViewController這樣viewDidLoadviewWillAppearviewDidAppear只被調用一次,我的意思是有沒有用viewWillAppear中的位置正因爲如此,而如果你想更新任何在加入ViewController你應該ViewController創建一個公共類,並調用它時,你需要更新..

相關問題