Ios 如何禁用ViewController的有限循环?
我在网上找到了这段代码并进行了测试。它起作用了,但它是无限循环的。我看到一些关于为页面索引创建一个新的Ios 如何禁用ViewController的有限循环?,ios,swift,uipageviewcontroller,Ios,Swift,Uipageviewcontroller,我在网上找到了这段代码并进行了测试。它起作用了,但它是无限循环的。我看到一些关于为页面索引创建一个新的func的帖子 链接到我在其上找到代码的网站: 有人愿意编辑代码以结束循环吗 import UIKit class MyPageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate { var pages = [UIViewControlle
func
的帖子
链接到我在其上找到代码的网站:
有人愿意编辑代码以结束循环吗
import UIKit
class MyPageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
var pages = [UIViewController]()
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.dataSource = self
let page1: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page1")
let page2: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page2")
let page3: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page3")
pages.append(page1)
pages.append(page2)
pages.append(page3)
setViewControllers([page2], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
let currentIndex = pages.indexOf(viewController)!
let previousIndex = abs((currentIndex - 1) % pages.count)
return pages[previousIndex]
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
let currentIndex = pages.indexOf(viewController)!
let nextIndex = abs((currentIndex + 1) % pages.count)
return pages[nextIndex]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
页面视图控制器不应换行 您的
viewControllerBeforeViewController
和viewControllerAfterViewController
方法都被编写为从第一个到最后一个或从最后到第一个,这是错误的
只需将viewControllerBeforeViewController
重写为减量currentIndex
,并返回该视图控制器,除非它是
类MyPageViewController:UIPageViewController、UIPageViewControllerDataSource、UIPageViewControllerDelegate{
var pages = [UIViewController]()
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.dataSource = self
let page1: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page1")
let page2: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page2")
let page3: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page3")
pages.append(page1)
pages.append(page2)
pages.append(page3)
setViewControllers([page2], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
let currentIndex = pages.indexOf(viewController)!
let previousIndex = abs((currentIndex - 1) % pages.count)
if (previousIndex > 0)
{
return nil
}
return pages[previousIndex]
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
let currentIndex = pages.indexOf(viewController)!
let nextIndex = abs((currentIndex + 1) % pages.count)
if (nextIndex < 1)
{
return nil
}
return pages[nextIndex]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
<代码>var页面=[UIViewController]()
重写func viewDidLoad(){
super.viewDidLoad()
self.delegate=self
self.dataSource=self
让page1:UIViewController!=情节提要?。实例化EVIEWControllerWithiIdentifier(“page1”)
让page2:UIViewController!=情节提要?。实例化EVIEWControllerWithiIdentifier(“page2”)
让page3:UIViewController!=情节提要?。实例化EVIEWControllerWithiIdentifier(“page3”)
pages.append(第1页)
pages.append(第2页)
第页。追加(第3页)
SetViewController([page2],方向:UIPageViewControllerNavigationDirection.Forward,动画:false,完成:nil)
}
func pageViewController(pageViewController:UIPageViewController,viewController预览控制器viewController:UIViewController)->UIViewController{
让currentIndex=pages.indexOf(viewController)!
让previousIndex=abs((currentIndex-1)%pages.count)
如果(以前的索引>0)
{
归零
}
返回页面[以前的索引]
}
func pageViewController(pageViewController:UIPageViewController,viewControllerAfterViewController:UIViewController)->UIViewController{
让currentIndex=pages.indexOf(viewController)!
设nextIndex=abs((currentIndex+1)%pages.count)
如果(nextIndex<1)
{
归零
}
返回页面[nextIndex]
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
}Swift 3.0
“它工作了,但它在一个无限循环中”——这是一个矛盾。@rmaddy,看看代码,我认为他不是指无限循环。该代码使最后一页循环回到第一页,并使第一页循环到最后一页。不完全是一个无限循环,而是一本无穷无尽的书。(参见我的答案)我无法使
viewControllerAfterViewController
工作,我可以一直向右滚动<代码>viewControllerBeforeViewController工作正常,谢谢。也许给我一点代码,这样我就可以完成viewControllerAfterViewController
。在viewControllerAfterViewController
中,它应该是nextIndex<1
,然后它就可以工作了:)谢谢,听起来不对。您需要确保新索引没有超出数组边界,因此在viewControllerAfterViewController
中,您需要测试nextIndex
它仍然可以使用nextIndex<1
,nextIndex
由于某种原因不起作用,它将它放在一个循环中。因此,在问题的底部发布您的修订代码作为解决方案。谢谢,使用代码示例使其非常容易理解
var pages = [UIViewController]()
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.dataSource = self
let page1: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page1")
let page2: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page2")
let page3: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page3")
pages.append(page1)
pages.append(page2)
pages.append(page3)
setViewControllers([page2], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
let currentIndex = pages.indexOf(viewController)!
let previousIndex = abs((currentIndex - 1) % pages.count)
if (previousIndex > 0)
{
return nil
}
return pages[previousIndex]
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
let currentIndex = pages.indexOf(viewController)!
let nextIndex = abs((currentIndex + 1) % pages.count)
if (nextIndex < 1)
{
return nil
}
return pages[nextIndex]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
var pages = [UIViewController]()
extension ViewController: UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerBefore viewController: UIViewController) -> UIViewController? {
let currentIndex = pages.index(of: viewController)!
let previousIndex = currentIndex - 1
return (previousIndex == -1) ? nil : pages[previousIndex]
}
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfter viewController: UIViewController) -> UIViewController? {
let currentIndex = pages.index(of: viewController)!
let nextIndex = currentIndex + 1
return (nextIndex == pages.count) ? nil : pages[nextIndex]
}
}