Doj Yias Lem
Doj Yias Lem

Reputation: 137

Not able to use Custom Cell with UITableView

I am trying to populate uitableview with custom but getting the following error:

Fatal error: Use of unimplemented initializer 'init(style:reuseIdentifier:)' for class 'Appname.PostCellView'

Code:

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 4
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! PostCellView
        return cell
    }

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.register(PostCellView.self, forCellReuseIdentifier: "Cell")
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

Post View Cell: (this class is loaded in the File's Owner of the view)

import UIKit
protocol PostCellViewDelegate: class {

}

class PostCellView: UITableViewCell {
    weak var delegate:  PostCellViewDelegate?


    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        let _ = commonInitialization()

    }

    func customise(imageName : String , color : UIColor, logoLabelValue : String, websiteValue: String)
    {
    }

    func commonInitialization() -> UIView
    {
        let bundle = Bundle.init(for: type(of: self))
        let nib = UINib(nibName: "PostCellView", bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
        view.frame = bounds
        view.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleHeight]
        addSubview(view)
        return view

    }

}

Please help me finding what's wrong with my code and how I should rectify the same.

Upvotes: 4

Views: 808

Answers (2)

Soham Ray
Soham Ray

Reputation: 215

Please shift the call to commonInitialization() from initWithCoder to method awakeFromNib. Also remove the initWithCoder method

In your PostCellView code add this method and remove the initWithCoder.

override func awakeFromNib() {
  super.awakeFromNib()
  let _ = commonInitialization()
}

Upvotes: 0

Lal Krishna
Lal Krishna

Reputation: 16160

Override init(style:reuseIdentifier:)

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    // Code
}

Please check this tutorial

Upvotes: 2

Related Questions