Swift TableView单元格不显示

时间:2017-08-29 11:13:24

标签: swift xcode uitableview

我遇到的问题是我的TableViewController没有显示单元格的内容。我有一个按钮,可以加载有效的数据,但也应该在单元格中显示。我忘记了" vieDidLoad"功能?您可以在最后找到故事板和应用程序中的图像。

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.register(UINib(nibName: "TableViewCell", bundle: Bundle.main), forCellReuseIdentifier: "TableViewCell")
}
override func viewWillAppear(_ animated: Bool) {
    let btn = UIButton(frame: CGRect(x: 0, y: 25, width: self.view.frame.width, height: 50))
    btn.backgroundColor = UIColor.cyan
    //btn.setTitle("Add new Dummy", for: UIControlState)
    btn.addTarget(self, action: #selector(addDummyData), for: UIControlEvents.touchUpInside)
    self.view.addSubview(btn)
}
@objc func addDummyData() {
    RestApiManager.sharedInstance.getRandomCar { (json: NSArray?) in

        if let results = json {
            for entry in results {
                self.items.append(CarObject(json: entry as! Dictionary))
            }
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
    }
}
func tableView(tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) as! TableViewCell
    if cell == nil {
        cell = UITableViewCell(style: UITableViewCellStyle.value1, reuseIdentifier: "TableViewCell") as! TableViewCell
    }
    let car = self.items[indexPath.row]
    print(car.pictureURL)
    if let url = NSURL(string: car.pictureURL) {
        if let data = NSData(contentsOf: url as URL) {
            cell.carImage?.image = UIImage(data: data as Data)
        }
    }

    // Create Swift / Cocoa Touch file with carImage etc. Actionbutton
    cell.carTitleLabel.text = "test"//car1
    cell.carPriceLabel.text = car.carPrice
    print("test3")
    return cell
}

}

Storyboard

app

3 个答案:

答案 0 :(得分:2)

像Rishabh所说,你需要在viewDidLoad中设置数据源和委托

override func viewDidLoad {
   super.viewDidLoad()
   tableView.datasource = self
   tableView.delegate = self
}

答案 1 :(得分:0)

您需要在viewDiDLoad()中设置DataSource和Delegate 像下面的东西。

 self.tableView.dataSource = dataSource!

答案 2 :(得分:0)

您应该将这些功能用于默认UITableViewController。也许你错过了其中一个。

import UIKit

class YourViewController: UITableViewController {

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1 //Your section count
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.items.count //Your row count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) as! TableViewCell
    if cell == nil {
        cell = UITableViewCell(style: UITableViewCellStyle.value1, reuseIdentifier: "TableViewCell") as! TableViewCell
    }
    let car = self.items[indexPath.row]
    print(car.pictureURL)
    if let url = NSURL(string: car.pictureURL) {
        if let data = NSData(contentsOf: url as URL) {
            cell.carImage?.image = UIImage(data: data as Data)
        }
    }

    // Create Swift / Cocoa Touch file with carImage etc. Actionbutton
    cell.carTitleLabel.text = "test"//car1
    cell.carPriceLabel.text = car.carPrice
    print("test3")
    return cell
}

}

注意:您还应该检查self.items.count中的numberOfRowsInSection。您的return值不应为0.