2015-02-06 83 views
1

ENV:xcode6,迅速程序初始化的UITableViewController的一個自定義子類tableviewcell

我試圖用SLPagingViewSwift作爲rootcontroller,並在頁面中的一個,我想用一個自定義的UITableViewController。

我不知道爲什麼它不工作,總是拋出「2015-02-06 23:03:18.228 xiaoyu [4825:46536]由於未捕獲的異常'NSInternalInconsistencyException',終止應用程序,原因:'無法退出具有標識符PersonCell的單元格 - 必須爲該標識符註冊一個筆尖或類別,或者在故事板「」中連接原型單元格,並且我已經在故事板中將標識符定義爲'PersonCell'。

這裏是主controlelr代碼:

var controller: SLPagingViewSwift? 

var ctr1 = PersonTableViewController() 
var ctr2 = UIViewController() 
var ctr3 = UIViewController() 

override func viewDidLoad() { 
    super.viewDidLoad() 


    var navTitleLabel1 = UILabel() 
    navTitleLabel1.text = "Home" 
    navTitleLabel1.font = UIFont(name: "Helvetica", size: 20) 
    navTitleLabel1.textColor = UIColor.whiteColor() 
    var navTitleLabel2 = UILabel() 
    navTitleLabel2.text = "Discover" 
    navTitleLabel2.font = UIFont(name: "Helvetica", size: 20) 
    navTitleLabel2.textColor = UIColor.whiteColor() 
    var navTitleLabel3 = UILabel() 
    navTitleLabel3.text = "Activity" 
    navTitleLabel3.font = UIFont(name: "Helvetica", size: 20) 
    navTitleLabel3.textColor = UIColor.whiteColor() 

    var orange = UIColor(red: 255/255, green: 69.0/255, blue: 0.0/255, alpha: 1.0) 
    var gray = UIColor(red: 0.84, green: 0.84, blue: 0.84, alpha: 1.0) 


    ctr1.title = "Ctr1" 
    ctr1.view.backgroundColor = UIColor.whiteColor() 
    ctr2.title = "Ctr2" 
    ctr2.view.backgroundColor = UIColor.yellowColor() 
    ctr3.title = "Ctr3" 
    ctr3.view.backgroundColor = UIColor.blueColor() 

    controller = SLPagingViewSwift(items: [navTitleLabel1, navTitleLabel2, navTitleLabel3], controllers: [ctr1,ctr2,ctr3], showPageControl: false) 

    controller?.currentPageControlColor = UIColor.whiteColor() 
    controller?.tintPageControlColor = UIColor(white: 0.799, alpha: 1.0) 
    controller?.pagingViewMoving = ({ subviews in 
     for v in subviews { 
      var lbl = v as UILabel 
      var c = gray 

      if(lbl.frame.origin.x > 45 && lbl.frame.origin.x < 145) { 
       c = self.gradient(Double(lbl.frame.origin.x), topX: Double(46), bottomX: Double(144), initC: orange, goal: gray) 
      } 
      else if (lbl.frame.origin.x > 145 && lbl.frame.origin.x < 245) { 
       c = self.gradient(Double(lbl.frame.origin.x), topX: Double(146), bottomX: Double(244), initC: gray, goal: orange) 
      } 
      else if(lbl.frame.origin.x == 145){ 
       c = orange 
      } 
      lbl.textColor = c 
     } 
    }) 


    controller?.didChangedPage = ({ currentIndex in 
     println(currentIndex) 
    }) 

    self.setViewControllers([controller!], animated: true) 
} 

PersonTableViewController是自定義TableViewController,並在控制器,我使用自定義tableviewcell。

下面是代碼爲PersonTableViewController:

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Uncomment the following line to preserve selection between presentations 
    // self.clearsSelectionOnViewWillAppear = false 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

// MARK: - Table view data source 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // #warning Potentially incomplete method implementation. 
    // Return the number of sections. 
    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete method implementation. 
    // Return the number of rows in the section. 
    return 1 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("PersonCell", forIndexPath: indexPath) as PersonTableViewCell 
    cell.name.text = "aaa" 

    return cell 
} 
+0

有沒有從你的tableview包含PersonCell到你的表視圖的出口(在故事板)試圖離開? – timgcarlson 2015-02-06 15:42:30

+0

是的。事情是,如果我不使用SLPagingViewSwift作爲根控制器,它可以正常工作,這意味着我的自定義PersonTableViewController由故事板初始化,而不是由我自己初始化。 – des 2015-02-07 01:49:14

回答

0

方法viewDidLoad應與表視圖寄存器細胞類。的UITableViewController方法是:

func registerClass(_ cellClass: AnyClass,forCellReuseIdentifier identifier: String) 

所以,你的情況應該是:

ctr1.registerClass(PersonTableViewCell.self, forCellReuseIdentifier: "PersonCell") 
+0

非常感謝您的幫助。但似乎沒有奏效。在我添加你的方法後,它會拋出另一個異常「致命錯誤:意外地發現零,同時展開一個可選值」,它指向「cell.name.text =」aaa「」,在這種情況下單元格中的名稱屬性爲零。 – des 2015-02-07 01:52:23

+0

當我嘗試使用「viewDidLoad」函數中的「registerNib」後,它解決了。我不知道這兩者之間有什麼區別。 – des 2015-02-09 13:41:29

相關問題