如何访问在xib

时间:2015-08-14 08:13:54

标签: ios iphone swift uitableview

我在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

如果有人遇到同样的问题,可能会出现什么问题。

4 个答案:

答案 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)

答案 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

感谢大家的贡献。 :)