gpt4 book ai didi

ios - uipageviewController : how is the index found in this code?

转载 作者:行者123 更新时间:2023-11-29 02:16:16 25 4
gpt4 key购买 nike

我不明白 indexOfVC 如何返回索引:dataObject 在 ContentViewController 中是可选的:

class ContentViewController : UIViewController {

var dataObject:AnyObject?

,当我们调用 indexOfVC 时,pageContent 包含 html 字符串。如果 dataObject 为空,pageContent 填充的是 html 文本,如何在 pageContent 中找到 dataObject?

func viewControllerAtIndex(index:Int)->ContentViewController?{
if (index < 0) || (index >= pageContent.count){
return nil
}
let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
var vc = storyboard.instantiateViewControllerWithIdentifier("ContentViewController") as ContentViewController
vc.dataObject = pageContent[index]
return vc
}

/* HERE */
func indexOfVC(viewController:ContentViewController) ->Int {
if let dataObject : AnyObject = viewController.dataObject {
return pageContent.indexOfObject(dataObject)
}
else {
return NSNotFound
}
}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {

var index : Int = indexOfVC(viewController as ContentViewController)
println("after: index: \(index)") //found 0, then 1, 2,... when scrolling right
if (index == NSNotFound) {
return nil
}
index++
return viewControllerAtIndex(index)
}

//called in viewdidload
func createContentPages(){
var pageStrings = [String]()
for i in 1...11 {
pageStrings.append(String("<html><head></head><body><br><h1>Chapter \(i)</h1><p>This is the page \(i) of content displayed using UIPageViewController in iOS 8.</p></body></html>"))
}
pageContent = pageStrings
}

代码来自:http://www.techotopia.com/index.php/An_Example_Swift_iOS_8_UIPageViewController_Application

最佳答案

答案是 dataObject 在调用 indexOfVC 时永远不会为 nil。虽然它是可选的,并且在 ContentViewController 首次初始化时将为 nil,但是一旦 viewControllerAtIndex 方法创建了一个 ContentViewController,它就会设置它的 dataObjectpageContent 数组的元素之一:

var vc = storyboard.instantiateViewControllerWithIdentifier("ContentViewController") as ContentViewController
vc.dataObject = pageContent[index]

所以整体流程是:

  1. 起始页设置在主视图 Controller 的viewDidLoad中:

    let startingViewController: ContentViewController = viewControllerAtIndex(0)!

    这将创建一个 VC 并将其 dataObject 设置为 pageContent[0]

  2. 如果您随后滑动,pageViewController 将调用 viewControllerAfterViewControler:viewController。在此调用中,viewController 参数是当前 View Controller 。该方法需要知道当前 VC 的索引,因此它以 viewController 作为参数调用 indexOfVC

  3. indexOfVC 读取该 View Controller 的 dataObject 值,即 pageContent[0]。因此 pageContent.indexOfObject(dataObject) 返回整数 0。

  4. 然后递增 (index++),因此调用 viewControllerAtIndex 将为索引 1 创建一个新的 VC。这将创建一个新的 View Controller 和立即将其 dataObject 设置为 pageContent[1]。循环继续......

因此,按照目前的编码,indexOfVC 从未 传递了一个 viewController,其中它的 dataObject 是 nil。但如果它曾经存在,它将返回特殊值 NSNotFound。然后 viewControllerAfterViewController: 检查返回值,如果它是 NSNotFound,则返回 nil - 告诉页面 View Controller 不允许滑动。

关于ios - uipageviewController : how is the index found in this code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28716389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com