2015-04-14 38 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 

}` 
相关问题