Abhinav
Abhinav

Reputation: 353

How to access custom cell created in xib

I have designed a custom cell in xib. And created a class for that as well. The code for that class is as given below-

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
}
}

Now I have a view controller there I am trying to access this cell. In storyboard I have given reusable identifier "Cell". Now I am using this cell like the following code-

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

I think that label is coming null. I have tried the following approach also but that is also not working.

var cell: ProjectsCell = tableView.dequeueReusableCellWithIdentifier("Cell") as ProjectsCell
        tableView.registerNib(UINib(nibName: "ProjectsCell", bundle: nil), forCellReuseIdentifier: "Cell")
        cell = tableView.dequeueReusableCellWithIdentifier("Cell") as ProjectsCell

What can be the issue if anyone has faced this same issue.

Upvotes: 2

Views: 143

Answers (4)

Pasha_Molodkin
Pasha_Molodkin

Reputation: 51

Maybe it set the dataSource and delegate : It can work
(source: icodeblog.com)

Upvotes: 0

Abhinav
Abhinav

Reputation: 353

I solved the problem using the following code-

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

Thanks everyone for contributing. :)

Upvotes: 0

Shubham Ojha
Shubham Ojha

Reputation: 471

You have dequeued the custom cell but not initialised it with the following method. Besides this you also have to set your custom class as the sub-class of UITableViewCell this is because you are getting the null value for the cell.

if cell == nil {
cell = UITableViewCell(style: UITableViewCellStylePlain reuseIdentifier: "Cell")
} 

Upvotes: 0

Adarkas2302
Adarkas2302

Reputation: 1834

Your custom cell should inherit from the class UITableViewCell. So the class would look like this.

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
 }
}

If you have it like this it should work. Because i am doing it like that in my Apps. For the future if you create a class you can use the 'File -> New Files...' menu. There you can select coca touch class and specify the class you want to inherit from and xcode will add all necessary functions.

Upvotes: 1

Related Questions