使用故事板在swift中创建自定义UITableViewCell

时间:2014-10-19 11:07:51

标签: ios objective-c xcode uitableview swift

我目前正在使用Xcode版本6.0.1并尝试创建自己的自定义tableViewCell。  我已将xib文件设置为显示为Xib File With Code

RecipeTableViewCell类的代码

import UIKit

class RecipesTableViewCell:UITableViewCell {

@IBOutlet weak var recipeImage: UIImageView!
@IBOutlet weak var nameLabel:UILabel!
@IBOutlet weak var prepTimeLabel: UILabel!


override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

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

    // Configure the view for the selected state
}

}

在我的tableViewController类中,我的代码对于控制单元格的主方法看起来像这样。

 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{

    var cell:RecipesTableViewCell? = tableView.dequeueReusableCellWithIdentifier("cell2") as? RecipesTableViewCell

    if cell == nil{
      //var nib:NSArray = NSBundle.mainBundle().loadNibNamed("RecipesTableViewCell", owner: self, options: nil)

        var tempController:UIViewController = UIViewController(nibName: "RecipesTableViewCell", bundle: nil)
        cell = tempController.view as? RecipesTableViewCell
        println(cell)
    }

    cell?.prepTimeLabel.text = "5 mins"
    cell?.nameLabel.text = "HellO"




    return cell!
}

任何时候我运行应用程序都会给我

致命错误:在展开Optional值时意外发现nil (lldb)

2 个答案:

答案 0 :(得分:1)

您必须在UITableViewController类中注册nib:

override func viewDidLoad() {
    super.viewDidLoad()

    self.tableView.registerNib(UINib(nibName: "RecipesTableViewCell", bundle: NSBundle.mainBundle()), forCellReuseIdentifier: "cell2")
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell:RecipesTableViewCell? = tableView.dequeueReusableCellWithIdentifier("cell2") as? RecipesTableViewCell

    cell?.prepTimeLabel.text = "5 mins"
    cell?.nameLabel.text = "HellO"

    return cell!
}

答案 1 :(得分:0)

你的cellForRowAtIndexPath:应该是这样的,

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{

    var cell:RecipesTableViewCell? = tableView.dequeueReusableCellWithIdentifier("cell2") as? RecipesTableViewCell

    if cell == nil{
         let nib = UINib(nibName: "RecipesTableViewCell", bundle: nil)
        let allViews: [AnyObject]? = nib?.instantiateWithOwner(self, options: nil)
        cell = allViews?.last as? cell:RecipesTableViewCell
    }

    cell?.prepTimeLabel.text = "5 mins"
    cell?.nameLabel.text = "HellO"
    return cell!
}

但是,最好使用register nib然后使用tableView.dequeueReusableCellWithIdentifier:forIndexPath:method。