0

In my swift code below each table view cell features a label. In that label I want to print the index path row. So in cell one the label should be 1 in cell to it should read 2. I tried to code cell.textLabel?.text = "(indexPath.row)" but that code is not complying. The code uses no storyboards all code.

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var numberOfRows = 3

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { numberOfRows }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 118 }

    var tableView = UITableView()
    var selectedIndexPath = IndexPath(row: 0, section: 0)

    override func viewDidLoad() {
        super.viewDidLoad()

        setTableVIew()
    }


    func setTableVIew(){
    
          
         
       
        
        let VCframe = view.frame
        let height = VCframe.height * 0.8
           
        let widthx = VCframe.width

   
             tableView.frame = CGRect(x: 10, y: 0, width: widthx - 20, height: height)
          
        tableView.delegate = self
        tableView.dataSource = self
        view.addSubview(tableView)
  
      
        tableView.register(customtv.self, forCellReuseIdentifier: "cell")
    }
 

   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! customtv
        cell.textLabel?.text = "\(indexPath.row)"
    
        return cell
    }




    
}
class customtv: UITableViewCell {
    lazy var backView : UIView = {
      let view = UIView(frame: CGRect(x: 10, y: 6, width: self.frame.width  , height: 110))
      view.backgroundColor = .green
      print(self.frame.width)
          return view
      }()
      

      
      override func layoutSubviews() {
         backView.clipsToBounds = true
         backView.frame =  CGRect(x: 0, y: 6, width: bounds.maxX  , height: 110)
   

      }
    lazy var lbl : UILabel = {
        let press = UILabel(frame: CGRect(x: 0, y: 3, width: 120 , height: 50))
        press.backgroundColor = .yellow
        press.text = String("1")
            
        return press
    }()

   
 


 

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(animated, animated: true)
        addSubview(backView)
    
        backView.addSubview(lbl)
    }
}
  • 1
    Your code doesn't compile so what's causing the error? at which line? – congnd Aug 12 '20 at 23:46
  • already see some lines that will make the compilation fail, but since these are that obvious you should definitely check your XCode output and try to fix them first, since that might add to your understanding of Swift/Xcode. – Daniel Marx Aug 13 '20 at 06:37

1 Answers1

1

You are almost there :)

You have a custom cell, so you need to set the value of custom label you created, instead of cell.textLabel?.text.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! customtv
    //cell.textLabel?.text = "\(indexPath.row)"   // Don't Do this.
    cell.lbl.text = "\(indexPath.row)"            // Do this.

    return cell
}

To clarify, your cells will start with values 0, 1, 2. IndexPath.row is 0 based.

enter image description here

TheAppMentor
  • 1,091
  • 7
  • 14