創建頁面動態使用這個代碼,它創建了一個關於的方式向下代碼1/3 PageViewController的UILabel - 意外地發現零而展開的可選值
import UIKit
class PageViewController: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
var pvc:UIPageViewController?
var testArray: [String] = []
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
pvc = UIPageViewController(
transitionStyle: .Scroll,
navigationOrientation: .Horizontal,
options: nil)
// Make this object the datasource and delegate for the PageViewController
self.pvc?.delegate = self
self.pvc?.dataSource = self
// Populate an array of test content for the pages
testArray = ["Page 1", "Page 2", "Page 3"]
// Create an array of child pages
var swipePage:SwipePageController = SwipePageController()
println("Page view Controller: \(testArray[0])")
swipePage.name = testArray[0]
var pageArray: NSArray = [swipePage]
self.pvc?.setViewControllers(pageArray, direction: .Forward, animated: true, completion: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
let index:Int! = (viewController as SwipePageController).index!
if (index >= self.testArray.count){
return nil
}
index + 1
return viewControllerAtIndex(index)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
let index:Int! = (viewController as SwipePageController).index!
if index == NSNotFound {
return nil
}
index - 1
return viewControllerAtIndex(index)
}
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
return self.testArray.count
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
let page = self.pvc?.viewControllers[0] as SwipePageController
let name = page.name
return find(self.testArray, name!)!
}
func viewControllerAtIndex(index: Int) -> SwipePageController?
{
if self.testArray.count == 0 || index >= self.testArray.count
{
return nil
}
// Create a new view controller and pass suitable data.
let swipeView = SwipePageController()
swipeView.name = self.testArray[index]
swipeView.index = index
return swipeView
}
中的println(),不顯示我期望看到的價值。因爲我動態創建的視圖控制器的代碼是在這裏:
import UIKit
class SwipePageController: UIViewController {
// var to hold the var to display to the interface
var name:String?
var index:Int?
@IBOutlet weak var testLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
println(name!)
if let passedName = name? {
self.testLabel.text = passedName
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
的println(!名字)確實顯示正確的值也是如此。但是,我無法用值填充標籤。我得到以下錯誤:
「致命錯誤:意外發現零而展開的可選值」
我在我束手無策......我想不出有什麼不工作。另外,看到我的Xcode界面的屏幕截圖發生錯誤:
誰能幫助?
看起來你的testLabel IBOutlet沒有連接任何東西。它在監視窗口中顯示爲零。你在使用故事板嗎? – 2014-12-13 19:11:08
@MikeTaverne我正在使用故事板。如果你想看,我也可以包括它。 IBOutlet附加到標籤上(如果我將鼠標移到排水溝中的點上,則實際標籤會突出顯示)......這就是爲什麼這會讓人困惑... – 2014-12-13 19:15:27
想到的唯一一件事就是讓確保在故事板中正確設置類名稱:在故事板中選擇視圖控制器,轉到「身份檢查器」並驗證「自定義類」下的「類名稱」設置爲「SwipePageController」。 – 2014-12-13 19:18:39