适用于iOS的Swift TableView

我提到了这个问题 ,并试图实现各种答案。 我正在做一些愚蠢的事情,因为cellForRow没有被调用,我只是得到一个空白的tableView。 是否有其他数据源或委托方法,我必须重写?

谢谢

class ViewController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //tableView.delegate = self //tableView.dataSource = self tableView.registerClass(UITableViewCell.classForCoder(), forCellReuseIdentifier: "Cell") //tableView.registerClass(MyTableViewCell.self, forCellReuseIdentifier: "Cell") tableView.reloadData() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { println("cellForRowAtIndexPath") println() //variable type is inferred var cell = tableView.dequeueReusableCellWithIdentifier("CELL") as? UITableViewCell if !cell { cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "CELL") } cell!.textLabel.text = "Text Label" cell!.detailTextLabel.text = "Detail Text Label" return cell } } 

更新 – 以下似乎工作..感谢您的帮助!

 class ViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //tableView.delegate = self //tableView.dataSource = self tableView.registerClass(UITableViewCell.classForCoder(), forCellReuseIdentifier: "Cell") //tableView.registerClass(MyTableViewCell.self, forCellReuseIdentifier: "Cell") tableView.reloadData() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int { return 10 } override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { println("cellForRowAtIndexPath") println() //variable type is inferred var cell = tableView.dequeueReusableCellWithIdentifier("CELL") as? UITableViewCell if !cell { cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "CELL") } cell!.textLabel.text = "Text Label" cell!.detailTextLabel.text = "Detail Text Label" return cell } } 

这是工作代码。 不需要在-viewDidLoad()注册单元格。 此外, UITableView被添加为故事板中的子视图。

如果有人有这样的要求。

 import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() self.tableView.delegate = self self.tableView.dataSource = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell = tableView.dequeueReusableCellWithIdentifier("CELL") as UITableViewCell? if (cell == nil) { cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "CELL") } cell?.textLabel?.text = NSString(format: "%d", indexPath.row) as String return cell! } } 

您需要连接TableView Delegate DataSource ,两者都与tableview连接,然后才可以调用NumberOfRowsInSectionCellForRowAtIndexpath