2014-06-11 127 views
1

我已經提到這個question,並試圖實現各種答案。我正在做一些愚蠢的事情,因爲cellForRow沒有被調用,我只是得到一個空白的tableView。是否有其他數據源或委託方法必須覆蓋?Swift TableView for iOS

感謝

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 
    } 


} 
+1

怎麼樣numberOfRowsForSection? – Stavash

+0

你的tableView的'dataSource'是否設置爲這個類?檢查你的'tableView.dataSource'並確保它的存在 – Jack

+1

你的類必須符合'UITableViewDataSource'和'UITableViewDelegate'協議,並且必須實現所有必需的方法,如前所述,這幾乎與兩個方法有關只有'dataSource'委託。這裏沒有新東西。 – holex

回答

3

這是工作代碼。不需要在-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! 
    } 
} 
+0

偉大的東西..感謝您抽出時間.. –

+1

任何兄弟情況:) – Kampai

+0

嗨,接受的答案被拒絕。我想知道爲什麼。它不正確嗎?應該更新嗎?謝謝 –

1

您需要連接代表的TableViewDataSource,兩者都與tableview則只能NumberOfRowsInSectionCellForRowAtIndexpath稱爲連接。