以编程方式更改UIPageViewController页面而不重新加载

时间:2015-04-14 23:03:40

标签: ios objective-c uipageviewcontroller

我正在使用UIPageViewController(持有两个UIViewControllers和一个UITableViewController)来浏览我的应用程序。我添加了按钮,使用setViewControllers方法从一个页面移动到另一个页面,这是许多堆栈溢出问题中建议的方法。但是,如果我在视图控制器B上启动,则滑动以查看控制器A,然后使用建议的setViewControllers方法返回到视图控制器B,它不会简单地返回到页面,它会加载视图控制器B的新实例。是一个问题,因为我在视图控制器B中显示从Internet检索到的数据,因此每次检索它都非常有用。 现在我知道这是可能的,因为所有人都可以做到这一点。除非他们只存储要显示的数据并每次加载

2 个答案:

答案 0 :(得分:1)

根据您在评论中的详细说明,您已经注意到页面视图控制器的滚动样式确实会缓存相邻的视图控制器。但这是一个实现细节,你不应该依赖它。听起来像你正在使用页面视图控制器不合适,特别是因为你只有三个页面"。我建议其中一个:

  • 标签栏控制器。同样,这样做的好处是所有标签栏控制器的孩子都能活着。

  • 滚动视图,构成您自己的自定义父视图控制器的基础。你可以把所有三个"页面"作为包含的视图并排,并滚动。这有一个更大的优势,滚动只是工作(虽然你也可以使它适用于标签栏控制器),你总是充电,所以孩子们再次活着。

答案 1 :(得分:0)

感谢Matt的评论和回答,我现在知道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

}`