2016-03-14 58 views
0

我有一些基本的代碼,試圖加載與一些單元格的UITableView。我在Storyboard中設置了單元格ID,併爲名爲「DemoListCell」的單元格創建了一個swift文件和xib。我不斷收到這個錯誤,雖然我沒有在我的項目中使用storyboard。 任何想法?謝謝你們所有人。Swift'必須註冊一個筆尖或類的標識符或連接故事板中的原型單元'

import UIKit 

// MARK:

class ViewController: UIViewController,UITableViewDataSource { 
let cellId = "DemoListID" 
let TopTableView = UITableView() 
let PageTableView = UITableView() 
let PageScrollView = UIScrollView() 
var CellsIdentifier:String = "" 
var NumbersofTab:CGFloat = 4 
var Number:CGFloat = 4 
var Size:CGFloat = 0 
var OldPoint:CGFloat = 0 
var NewPoint:CGFloat = 0{ 
    didSet{ 
     TopTableView.reloadData() 
    } 
} 

// MARK: - ViewDidLoad and init() 
override func viewDidLoad() { 


    let TopWidth = self.view.frame.size.width 
    Size = TopWidth 
    let TopHeight:CGFloat = 50 
    let TopY = 0 - (TopWidth - TopHeight)/2 
    let TopX = 0 + (TopWidth - TopHeight)/2 
    let PageY = TopHeight 
    let PageHeight = self.view.frame.size.height - TopHeight 

    //TopTableView 
    TopTableView.frame = CGRectMake(TopX, TopY, TopHeight,TopWidth) 
    TopTableView.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI/2)) 
    TopTableView.showsVerticalScrollIndicator = false 
    TopTableView.backgroundColor = UIColor.yellowColor() 
    TopTableView.dataSource = self 
    TopTableView.delegate = self 

    //PageTableView 


    PageTableView.frame = CGRectMake(0, 0, TopWidth,PageHeight) 
    let nib = UINib(nibName: "DemoListCell", bundle: nil) //Cell's Name 
    self.PageTableView.registerNib(nib, forCellReuseIdentifier: cellId) 
    PageTableView.backgroundColor = UIColor.blueColor() 

    //PageScrollView 
    PageScrollView.frame = CGRectMake(0, PageY, TopWidth,PageHeight) 
    PageScrollView.delegate = self 
    PageScrollView.contentSize = CGSize(width: TopWidth * NumbersofTab, height: PageScrollView.frame.height) 
    PageScrollView.pagingEnabled = true 
    PageScrollView.alwaysBounceHorizontal = false 
    PageScrollView.alwaysBounceVertical = false 




    //addSubview 
    self.view.addSubview(TopTableView) 

    PageScrollView.addSubview(PageTableView) 

    self.view.addSubview(PageScrollView) 

} 

}

// MARK: - UIScrollViewDelegate

extension ViewController: UIScrollViewDelegate{ 
func scrollViewWillBeginDragging(scrollView: UIScrollView) { 
    OldPoint = PageScrollView.contentOffset.x 

} 
func scrollViewDidEndDecelerating(scrollView: UIScrollView) { 
    NewPoint = PageScrollView.contentOffset.x 
    print("\(NewPoint)") 
} 

} // MARK: - UITableViewDalegate

extension ViewController:UITableViewDelegate{ 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier(self.cellId, forIndexPath: indexPath) as! DemoListCell 
    if tableView.isEqual(TopTableView){ 
    var cell:TopTableViewCell! = tableView.dequeueReusableCellWithIdentifier("cd") as? TopTableViewCell 
    if (cell == nil) { 
     cell = TopTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cd") 
     switch indexPath.row{ 
     case 0: 
      cell.backgroundColor = UIColor.greenColor() 
     case 1: 
      cell.backgroundColor = UIColor.redColor() 
     case 2: 
      cell.backgroundColor = UIColor.yellowColor() 
     case 3: 
      cell.backgroundColor = UIColor.whiteColor() 
     default: 
      cell.backgroundColor = UIColor.grayColor() 
     } 
    } 

    cell.TabTitle.text = "\(Int(NewPoint/Size))" 
    } 
    return cell 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    let RowNumber:Int = 1 
    switch RowNumber{ 
    default: return Int(NumbersofTab) 
    } 
} 
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    let NumberofPages = Size/NumbersofTab 
    return NumberofPages 
} 
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    UIView.animateWithDuration(0.3) {() -> Void in 
     let Pages = self.Size * CGFloat(indexPath.row) 
     self.PageScrollView.contentOffset = CGPoint(x: Pages, y: 0) 
     self.TopTableView.reloadData() 
     self.NewPoint = self.PageScrollView.contentOffset.x 
    } 
} 
} 

,這是 「CELLID」 單元格的代碼:

class DemoListCell: UITableViewCell { 

@IBOutlet weak var cellImg: UIImageView! 
@IBOutlet weak var cellLabel: UILabel! 
@IBOutlet weak var cellIcon: UIImageView! 


override func awakeFromNib() { 
    super.awakeFromNib() 
    self.cellImg.layer.masksToBounds = true 
    self.cellImg.layer.cornerRadius = 20.0 
    self.cellImg.layer.borderWidth = 0.0 
    self.cellImg.image = UIImage(named: "avatar.jpg")// Initialization code 
    self.cellIcon.image = UIImage(named: "Next") 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

}

,並有 「CD」 細胞的代碼:

class TopTableViewCell: UITableViewCell { 

var TabTitle = UILabel() 

override init(style: UITableViewCellStyle, reuseIdentifier: String!) { 
    super.init(style: style, reuseIdentifier: reuseIdentifier) 
    TabTitle = UILabel(frame: CGRectZero) 
    TabTitle.textAlignment = NSTextAlignment.Right 
    TabTitle.numberOfLines = 1 
    TabTitle.backgroundColor = UIColor.clearColor() 
    TabTitle.textColor = UIColor(red: 130/255, green: 137/255, blue: 141/255, alpha: 1.0) 
    self.contentView.addSubview(self.TabTitle) 
    // 130 137 141 
    self.separatorInset = UIEdgeInsets(top: 0, left: 100, bottom: 0, right: -100) 

} 

required init(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

override func layoutSubviews() { 

    let marginX = CGFloat(0.0) 
    let marginY = CGFloat(0.0) 
    let width = CGFloat(30) 
    let height = self.contentView.frame.size.width 
    self.TabTitle.transform = CGAffineTransformMakeRotation(CGFloat(M_PI/2)) 

    self.TabTitle.frame = CGRectMake(marginX, marginY, width, height) 
} 

}

回答

0

當您註冊一個筆尖與registerNib,您傳遞重用標識符(第二個參數)。該標識符需要在cellForRowAtIndexPath中使用。但是,您的cellForRowAtIndexPath使用"cd"作爲重用標識符,而不是cellId,這是您註冊了筆尖的那個。爲了解決這個問題,在cellForRowAtIndexPath改變雙復標識字符串:

var cell:TopTableViewCell! = tableView.dequeueReusableCellWithIdentifier(cellId) as? TopTableViewCell 
if (cell == nil) { 
    cell = TopTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellId) 

編輯

我的錯誤,我沒有看到其他離隊的cellForRowAtIndexPath的頂部。但是,我只看到一個註冊在viewDidLoad中的筆尖,這意味着TopTableViewCell從未註冊過標識"cd"

+0

我有另一個單元格的標識符「cd」。所以,項目中有兩個Tableview。一個是toptableview另一個是pagetableview。我想在toptableview中使用「cd」單元格,並在pagetableview中使用「cellId」。 – lyq11

+0

@ lyq11我沒有看到,但這意味着'TopTableViewCell'永遠不會被註冊。你還必須註冊'TopTableViewCell'。 – tktsubota

+0

TopTableviewCell只是一個類....我會把問題的「cd」代碼。 – lyq11

相關問題