0

I have a subclass of UITableViewCell called CustomTableCell which is declared in a swift 4.1. file.

In my view controller with the UITableView I have in cellForRowAt:

let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier") as! CustomTableCell
cell.delegate = self

I get the following error:

Value of type 'CustomTableCell' has no member delegate.

I declared the UITableViewDelegate at the top.

Daij-Djan
  • 49,552
  • 17
  • 113
  • 135
cdub
  • 24,555
  • 57
  • 174
  • 303

1 Answers1

2

UITableViewDelegate doesn't need cell.delegate = self.

If you CustomTableCell has your Custom Delegate then only you need to assign it. So if you don't have ant Custom Delegate for your CustomTableCell remove that line.

For tableView delegate methods you have to add this in viewDidLoad() :

yourTableView.delegate = self
yourTableView.dataSource = self

Or connect it using StoryBorad only.

Answer for: How do you create a cell delegate in the CustomTableCell class? Just curious

CustomTableCell.swift :

// Custom protocol 
protocol CustomCellDelegate: NSObjectProtocol {
   // Protocol method
   func someFunctionToPassSomeValue(name: String)
}
class CustomTableCell: UITableVieCell {
   weak var delegate: CustomCellDelegate?

  // Your class implementations and outlets..

  //Call your protocol method in some action, for example in button action
  @IBAction func buttonAction(sender: UIButton) {
    delegate?.someFunctionToPassSomeValue(name: "anyStringValue")
  } 
}

Then in ViewController class you need to assign instance to custom delegate variable.

let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier") as! CustomTableCell
cell.delegate = self

And implement protocol method :

extension ViewController: CustomCellDelegate {
   func someFunctionToPassSomeValue(name: String) {
      print("Delegate is working. Value : \(name)")
   }
}
Sharad Chauhan
  • 4,821
  • 2
  • 25
  • 50