我目前正在使用Xcode版本6.0.1并尝试创建自己的自定义tableViewCell。 我已将xib文件设置为显示为
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)
答案 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。