如何通过使用Xibs作为单元格在单视图控制器中处理两个表视图

时间:2019-03-26 13:27:22

标签: ios swift4

我试图将分段控制器与3个分段一起使用。如果单击第一段,则应该获得一个tableview。当我单击第二段时,我应该获得第二个表格视图,对于第三段时,我应该获得第三个表格视图。在这里,我正在使用XIB的tableview单元。我尝试了一些操作,但是表中没有任何数据。该表正在加载。但是该单元未加载。我在下面给出我的代码。如果有人帮助我,那就太好了。预先感谢。

 var arr1 = ["1","2","3","4"]
    var imagesarray = [UIImage(named: "11.png")!, UIImage(named: "22.png")!, UIImage(named: "33.png")!,UIImage(named: "11.png")!,UIImage(named: "22.png")!, UIImage(named: "33.png")!]

    override func viewDidLoad() {
        super.viewDidLoad()
       view_track.isHidden = false
        view_watch.isHidden = true
         view_ebooks.isHidden = true
        table_track.register(UINib(nibName: "ProgramMListenTableViewCell", bundle: nil), forCellReuseIdentifier: "ProgramMListenTableViewCell")
         table_watch.register(UINib(nibName: "ProgramMWatchTableViewCell", bundle: nil), forCellReuseIdentifier: "ProgramMWatchTableViewCell")
        table_watch.register(UINib(nibName: "ProgramEbooksTableViewCell", bundle: nil), forCellReuseIdentifier: "ProgramEbooksTableViewCell")
        table_ebooks.delegate = self
        table_ebooks.dataSource = self
        table_track.delegate = self
        table_track.dataSource = self
        table_watch.delegate = self
        table_watch.dataSource = self
   self.navigationController?.setNavigationBarHidden(true, animated: false)

    }

 @IBAction func Segment(_ sender: Any) {
    switch segment_program.selectedSegmentIndex
    {
    case 0:
        view_track.isHidden = false
        view_watch.isHidden = true
        view_ebooks.isHidden = true
        self.table_track.reloadData()
        break
    case 1:
        view_track.isHidden = true
         view_watch.isHidden = false
        view_ebooks.isHidden = true
          self.table_watch.reloadData()
      name_program.text = "Videos"
        break
    case 2:
        view_track.isHidden = true
        view_watch.isHidden = true
        view_ebooks.isHidden = false
          self.table_ebooks.reloadData()
        name_ebooks.text = "Ebooks"
        break
    default:
        break
    }

}
}
extension ProgramMListenViewController: UITableViewDataSource,UITableViewDelegate{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        if tableView == table_track{
            return self.arr1.count
        }else if tableView == table_watch{
            return self.imagesarray.count
        }else{
            return self.arr1.count
        }

    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        if tableView == table_track{
            let cell = table_track.dequeueReusableCell(withIdentifier: "ProgramMListenTableViewCell") as! ProgramMListenTableViewCell

        }else if tableView == table_watch{
             let cell = table_watch.dequeueReusableCell(withIdentifier: "ProgramMWatchTableViewCell") as! ProgramMWatchTableViewCell
            cell.img_watch.image = imagesarray[indexPath.row]
        }else if tableView == table_ebooks{
            let cell = table_ebooks.dequeueReusableCell(withIdentifier: "ProgramEbooksTableViewCell") as! ProgramEbooksTableViewCell
            cell.image_ebooks.image = imagesarray[indexPath.row]
        }

        return UITableViewCell()
    }


}

2 个答案:

答案 0 :(得分:0)

您必须返回单元格,而不是始终返回UITableViewCell()

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if tableView == table_track{
        let cell = table_track.dequeueReusableCell(withIdentifier: "ProgramMListenTableViewCell") as! ProgramMListenTableViewCell
        return cell
    }else if tableView == table_watch{
        let cell = table_watch.dequeueReusableCell(withIdentifier: "ProgramMWatchTableViewCell") as! ProgramMWatchTableViewCell
        cell.img_watch.image = imagesarray[indexPath.row]
        return cell
    }else if tableView == table_ebooks{
        let cell = table_ebooks.dequeueReusableCell(withIdentifier: "ProgramEbooksTableViewCell") as! ProgramEbooksTableViewCell
        cell.image_ebooks.image = imagesarray[indexPath.row]
        return cell
    }

    return UITableViewCell()
}

答案 1 :(得分:0)

如前所述,您需要根据表返回各自的UITableViewCell以便显示它。您应该注意dequeueReusableCell()中的错误,因此我建议以下实现:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var returnCell = UITableViewCell()
        if tableView == table_track{

            guard let cell = table_track.dequeueReusableCell(withIdentifier: "ProgramMListenTableViewCell") as? ProgramMListenTableViewCell else {
                print("Error getting cell as ProgramMListenTableViewCell")
                return returnCell
            }
            /*Customize your cell*/
            returnCell = cell

        }else if tableView == table_watch{

            guard let cell = table_watch.dequeueReusableCell(withIdentifier: "ProgramMListenTableViewCell") as? ProgramMWatchTableViewCell else {
                print("Error getting cell as ProgramMWatchTableViewCell")
                return returnCell
            }
            /*Customize your cell*/
            cell.img_watch.image = imagesarray[indexPath.row]
            returnCell = cell

        }else if tableView == table_ebooks{

            guard let cell = table_ebooks.dequeueReusableCell(withIdentifier: "ProgramMListenTableViewCell") as? ProgramEbooksTableViewCell else {
                print("Error getting cell as ProgramEbooksTableViewCell")
                return returnCell
            }
            cell.image_ebooks.image = imagesarray[indexPath.row]
            returnCell = cell
        }

        return returnCell
    }

通过这种方式,您可以安全地获取正确的单元格类型,对其进行编辑并将其返回到相应的表中。