How do you load custom UITableViewCells from Xib files?

前端 未结 23 1968
抹茶落季
抹茶落季 2020-11-22 11:11

The question is simple: How do you load custom UITableViewCell from Xib files? Doing so allows you to use Interface Builder to design your cells. The answer app

23条回答
  •  無奈伤痛
    2020-11-22 11:33

    In Swift 4.2 and Xcode 10

    I have three XIB cell files

    in ViewDidLoad register your XIB files like this...

    This is first approach

    tableView.register(UINib.init(nibName: "XIBCell", bundle: nil), forCellReuseIdentifier: "cell1")
    tableView.register(UINib.init(nibName: "XIBCell2", bundle: nil), forCellReuseIdentifier: "cell2")
    //tableView.register(UINib.init(nibName: "XIBCell3", bundle: nil), forCellReuseIdentifier: "cell3")
    

    Second approach directly register XIB files in cellForRowAt indexPath:

    This is my tableview delegate functions

    //MARK: - Tableview delegates
    override func numberOfSections(in tableView: UITableView) -> Int {
    
        return 1
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
        return 6
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //This is first approach
        if indexPath.row == 0 {//Load first XIB cell
            let placeCell = tableView.dequeueReusableCell(withIdentifier: "cell1") as! XIBCell
            return placeCell
        //Second approach
        } else if indexPath.row == 5 {//Load XIB cell3
            var cell = tableView.dequeueReusableCell(withIdentifier:"cell3") as? XIBCell3
            if cell == nil{
                let arrNib:Array = Bundle.main.loadNibNamed("XIBCell3",owner: self, options: nil)!
                cell = arrNib.first as? XIBCell3
            }
    
            //ADD action to XIB cell button
            cell?.btn.tag = indexPath.row//Add tag to button
            cell?.btn.addTarget(self, action: #selector(self.bookbtn1(_:)), for: .touchUpInside);//selector
    
            return cell!
        //This is first approach
        } else {//Load XIB cell2
            let placeCell = tableView.dequeueReusableCell(withIdentifier: "cell2") as! XIBCell2
    
            return placeCell
        }
    
    }
    

提交回复
热议问题