2015-04-14 33 views
0

我使用的是UIPageViewController(控股兩家UIViewControllers和一個UITableViewController)您瀏覽我的應用程序。我已經添加了按鈕,使用在許多堆棧溢出問題中建議的setViewControllers方法從一個頁面移動到另一個頁面。但是,如果我開始上視圖控制器B,滑動,以查看控制器A,然後使用建議setViewControllers方法返回視圖控制器B,它不是簡單地返回到頁面,它加載視圖控制器B.本的新實例是一個問題,因爲我在視圖控制器B中顯示從互聯網檢索到的數據,所以每次檢索這個havig都非常不方便。 現在我知道這是可能的,因爲snapchat,tinder和fling都這樣做。除非他們只是存儲要顯示和加載每次基於在評論你的闡述變化UIPageViewController頁面編程無需重新加載

+0

「我正在使用UIPageViewController(持有兩個UIViewControllers和一個UITableViewController)」不可能。 UIPageViewController一次只有一個視圖控制器。 – matt

+0

「除非他們只存儲要顯示的數據並每次加載」。當然。模型 - 視圖 - 控制器!不要將持久性數據存儲在視圖控制器中。視圖控制器告訴視圖如何顯示模型數據。將數據存儲在模型中,並以不依賴視圖控制器的方式存儲 - 因爲正如您發現的那樣,它們不一定會持續存在。 – matt

+0

感謝馬特,請原諒我的無知,但我們是否在討論核心數據中的數據模型?讓我感到驚訝的是,如果你繼續使用tinder並向下滾動一個表格,然後轉到另一個視圖然後返回,它將以與你離開時相同的偏移量返回。那麼他們甚至會存儲這樣的東西? – TimWhiting

回答

1

,你已經注意到了頁面視圖控制器的滾動風格確實發生緩存相鄰視圖控制器的數據。但是這是一個實現細節,你不應該依賴它。這聽起來像你不適當地使用頁面視圖控制器,尤其是因爲你只有三個「頁面」。我會建議其中之一:

  • 一個標籤欄控制器。同樣,這具有所有標籤欄控制器的孩子保持活着的優點。

  • 滾動視圖,形成自己的自定義父視圖控制器的基礎。您可以將所有三個「頁面」並排放在一起,然後滾動。這有更大的優勢,滾動只是工作(雖然你也可以使它爲標籤欄控制器工作),並且你是在全面收費,所以再次讓孩子們都活着。

+0

謝謝你堅持與我馬特!這聽起來像你的第二個建議可能是我以後,我非常希望保持從頁面視圖控制器的刷卡導航。 – TimWhiting

+0

您可以使用標籤欄控制器進行滑動導航。但我不確定它比簡單的水平分頁滾動視圖有什麼優勢。 – matt

+0

這對我來說肯定會更容易實現,我該如何促進標籤欄控制器中的滾動? – TimWhiting

0

感謝馬特的意見和答案,我現在知道,一個UIPageViewController不堅持兒童視圖控制器在內存中,所以我用一個UIScrollView代替。無論如何,它比UIPageViewController實現起來要容易得多。下面的代碼設置我需要的東西

override func viewDidLoad() { 
     super.viewDidLoad() 

    var scrollView = UIScrollView(frame: CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height)) 
    scrollView.contentSize = CGSizeMake(self.view.bounds.width*3, self.view.bounds.height) 
    scrollView.pagingEnabled=true 
    self.view.addSubview(scrollView) 

    var scrollView2 = UIScrollView(frame: CGRectMake(self.view.bounds.width, 0, self.view.bounds.width, self.view.bounds.height)) 
    scrollView2.backgroundColor=UIColor.redColor() 
    scrollView2.contentSize=CGSizeMake(self.view.bounds.width, 2*self.view.bounds.height) 
    scrollView2.pagingEnabled=true 
    scrollView2.bounces=false 
    scrollView2.showsHorizontalScrollIndicator=false 
    scrollView2.showsVerticalScrollIndicator=false 
    scrollView.addSubview(scrollView2) 

    var view1 = UIView(frame: CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height)) 
    view1.backgroundColor=UIColor.blueColor() 
    scrollView.addSubview(view1) 
    //Add View controller 1 to view1 

    var view2 = UIView(frame: CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height)) 
    view2.backgroundColor=UIColor.greenColor() 
    scrollView2.addSubview(view2) 
    //Add view controller 2 to view2 

    var view3 = UIView(frame: CGRectMake(0, self.view.bounds.height, self.view.bounds.width, self.view.bounds.height)) 
    view3.backgroundColor=UIColor.yellowColor() 
    scrollView2.addSubview(view3) 
    //Add view controller 3 to view3 

    var view4 = UIView(frame: CGRectMake(2*view.bounds.width, 0, self.view.bounds.width, self.view.bounds.height)) 
    view4.backgroundColor=UIColor.orangeColor() 
    scrollView.addSubview(view4) 
    //Add view controller 4 to view4 

}` 
相關問題