如何调试UITableView不显示行?

时间:2018-10-23 14:02:41

标签: ios swift uitableview tableview

我有一个Viewcontroller

class PlacesVC: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    // MARK: - Table view data source
    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 4
    }


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

        let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")
        cell.textLabel?.text = "Row \(indexPath.row)"

        return cell
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "toMap", sender: kill)
    }
}

我的单元格ID也为Cell

enter image description here

构建并运行该应用程序时,我不断获得空表

enter image description here

我希望这样得到4行。

enter image description here

如何调试为什么我的行没有显示?

4 个答案:

答案 0 :(得分:3)

首先,请确保已将tableView的delegatedataSource属性设置为该vi​​ewController的实例(否则将不会调用这些方法)。 (如果ViewController是从TableViewController继承的,则可以跳过此步骤。)

第二件事,您正在为每行初始化一个新的单元格实例,而不是重复使用它。
因此,请替换此行:

    let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")

具有:

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 

第三件事:确保您已经从IB设置了正确的课程。

最后一件事:将样式从“自定义”更改为“基本”,以使用默认的textLabel

答案 1 :(得分:2)

您需要在故事板上的ViewController的Identity Inspector部分中设置您的课程。

Like in below picture

答案 2 :(得分:0)

您可以尝试

HolidayService2 hs1= new HolidayService2();

HolidayService2Soap hss1=  hs1.getHolidayService2Soap();

ArrayOfCountryCode acc = hss1.getCountriesAvailable();

system.out.println(acc.getCountryCode());

如果您希望它动态化

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

   return 60
}

答案 3 :(得分:-1)

  • 检查是否已在代码中添加tableView delegatedataSource

  • 注册一个类(如果您使用的是自定义类),以用于创建新的表格单元格。在viewDidLoad()中,如下所示:

    tableView.register({your cell class}, forCellReuseIdentifier:"identifier")

  • 通过

    初始化单元格对象

    tableView.dequeueReusableCell(WithIdentifier:,forIndexPath:)

    只要您的单元格没有使用任何类,就不需要注册您的类。 您只需通过以下方式初始化单元格对象:

    tableView.dequeueReusable(CellWithIdentifier:)