我使用的是UIPageViewController(控股两家UIViewControllers和一个UITableViewController)您浏览我的应用程序。我已经添加了按钮,使用在许多堆栈溢出问题中建议的setViewControllers
方法从一个页面移动到另一个页面。但是,如果我开始上视图控制器B,滑动,以查看控制器A,然后使用建议setViewControllers方法返回视图控制器B,它不是简单地返回到页面,它加载视图控制器B.本的新实例是一个问题,因为我在视图控制器B中显示从互联网检索到的数据,所以每次检索这个havig都非常不方便。 现在我知道这是可能的,因为snapchat,tinder和fling都这样做。除非他们只是存储要显示和加载每次基于在评论你的阐述变化UIPageViewController页面编程无需重新加载
回答
,你已经注意到了页面视图控制器的滚动风格确实发生缓存相邻视图控制器的数据。但是这是一个实现细节,你不应该依赖它。这听起来像你不适当地使用页面视图控制器,尤其是因为你只有三个“页面”。我会建议其中之一:
一个标签栏控制器。同样,这具有所有标签栏控制器的孩子保持活着的优点。
滚动视图,形成自己的自定义父视图控制器的基础。您可以将所有三个“页面”并排放在一起,然后滚动。这有更大的优势,滚动只是工作(虽然你也可以使它为标签栏控制器工作),并且你是在全面收费,所以再次让孩子们都活着。
谢谢你坚持与我马特!这听起来像你的第二个建议可能是我以后,我非常希望保持从页面视图控制器的刷卡导航。 – TimWhiting
您可以使用标签栏控制器进行滑动导航。但我不确定它比简单的水平分页滚动视图有什么优势。 – matt
这对我来说肯定会更容易实现,我该如何促进标签栏控制器中的滚动? – TimWhiting
感谢马特的意见和答案,我现在知道,一个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
}`
- 1. .submit()无需重新加载页面
- 2. 清除#无需重新加载页面
- 3. 无需重新加载页面重新加载阵列
- 4. 重新加载图片而无需重新加载页面?
- 5. 无需重新加载页面重新加载数据表?
- 6. Jquery/Ajax刷新无需重新加载或加载页面?
- 7. 如何通过改变$ stateParams无需重新加载页面
- 8. 提高PHP变量onSroll无需重新加载页面
- 9. 更改变量onchange select无需重新加载页面
- 10. 清除页面数据,无需重新加载页面?
- 11. UIPageViewController加载错误页面
- 12. 页面重定向无需重新加载/刷新
- 13. 重新运行jsp页面中的测试,无需重新加载页面
- 14. HTML - 更新\更新页面内容,无需刷新\重新加载页面
- 15. 重新加载页面一次,然后重新加载没有内容变化
- 16. 使用javascript重新加载div而无需重新加载页面
- 17. 的onsubmit需要重新加载页面
- 18. 重置表单元素无需重新加载页面
- 19. 无需重新加载页面的ASP.NET网站的新内容
- 20. jQuery dataTable 1.7.6刷新表格无需重新加载页面
- 21. 更新Postgres数据库,无需重新加载页面
- 22. 刷新Mysql计数,无需重新加载页面
- 23. 如何刷新页面而无需在PHP中重新加载?
- 24. 更新DOM,无需在Django中重新加载页面
- 25. Spring MVC - 无需重新加载打开新页面
- 26. 刷新动态选择框,无需重新加载页面
- 27. 显示内容Onclick无需重新加载/刷新页面
- 28. 自动刷新显示表无需重新加载页面
- 29. 更新页面和网址,无需重新加载
- 30. 更新div无需重新加载页面
“我正在使用UIPageViewController(持有两个UIViewControllers和一个UITableViewController)”不可能。 UIPageViewController一次只有一个视图控制器。 – matt
“除非他们只存储要显示的数据并每次加载”。当然。模型 - 视图 - 控制器!不要将持久性数据存储在视图控制器中。视图控制器告诉视图如何显示模型数据。将数据存储在模型中,并以不依赖视图控制器的方式存储 - 因为正如您发现的那样,它们不一定会持续存在。 – matt
感谢马特,请原谅我的无知,但我们是否在讨论核心数据中的数据模型?让我感到惊讶的是,如果你继续使用tinder并向下滚动一个表格,然后转到另一个视图然后返回,它将以与你离开时相同的偏移量返回。那么他们甚至会存储这样的东西? – TimWhiting