我在xib中设计了一个自定义单元格。并为此创建了一个类。该类的代码如下所示 -
class ProjectsCell : UITableViewCell {
@IBOutlet var projectNameLabel: UILabel! //This is outlet to which I will assign value.
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
}
}
现在我有一个视图控制器,我正在尝试访问此单元格。在故事板中,我给出了可重复使用的标识符" Cell"。现在我正在使用这个单元格,如下面的代码 -
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as ProjectsCell
let project = projects[indexPath.row]
cell.projectNameLabel?.text = project.ProjectName //********* Here I am getting exception for projectNameLabel.
return cell
我认为该标签无效。我也尝试了以下方法,但这也无效。
var cell: ProjectsCell = tableView.dequeueReusableCellWithIdentifier("Cell") as ProjectsCell
tableView.registerNib(UINib(nibName: "ProjectsCell", bundle: nil), forCellReuseIdentifier: "Cell")
cell = tableView.dequeueReusableCellWithIdentifier("Cell") as ProjectsCell
如果有人遇到同样的问题,可能会出现什么问题。
答案 0 :(得分:1)
您的自定义单元格应该继承自UITableViewCell类。所以课程看起来像这样。
class ProjectsCell: UITableViewCell {
@IBOutlet var projectNameLabel: UILabel! //This is outlet to which I will assign value.
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
}
}
如果你有这样的话它应该有效。因为我在我的应用程序中这样做。对于将来如果您创建一个类,您可以使用'文件 - >新文件......'菜单。在那里你可以选择coca touch class并指定你想要继承的类,xcode将添加所有必要的功能。
答案 1 :(得分:0)
您已将自定义单元格出列,但未使用以下方法对其进行初始化。 除此之外,您还必须将自定义类设置为UITableViewCell的子类,这是因为您获取了单元格的空值。
if cell == nil {
cell = UITableViewCell(style: UITableViewCellStylePlain reuseIdentifier: "Cell")
}
答案 2 :(得分:0)
也许它设置了dataSource和delegate: It can work http://www.icodeblog.com/wp-content/uploads/2009/05/datasourceconnection1.png
答案 3 :(得分:0)
我使用以下代码解决了问题 -
var array = NSBundle.mainBundle().loadNibNamed("ProjectsCell", owner: self, options: nil)
var cell = array[0] as ProjectsCell
let project = projects[indexPath.row]
cell.nameLabel?.text = project.Name
return cell
感谢大家的贡献。 :)