2014-09-25 80 views
0

這是什麼之間的區別:Xcode中 - 的cellForRowAtIndexPath - 初始化細胞

var cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell") 

這:

var cell: UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell 

他們似乎都爲我。做工精細。

PS:我知道這似乎是一個業餘愛好者的問題,但我是Xcode的初學者,所以沒有理由成爲一個自鳴得意的人。

回答

2

當你寫:

var cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell") 

要初始化使用其構造一個新的小區。

當你寫:

var cell = self.tableView.dequeueReusableCellWithIdentifier("cell") 

你出列的單元格,所以你與標識符cell已經在tableView已經登錄假設你的細胞。

通常,如果電池被設計在Interface Builder並設置爲原型細胞,或者如果你已經使用方法self.tableView.registerClass(MyCell.classForCoder(), forCellReuseIdentifier: "cell")你將不再需要使用構造,因爲它是在tableView已經初始化註冊您的電池再利用。

但是,如果你的設計程序,如創建UILabelUIImage或任何組件,您必須使用構造函數來代替,然後使用列方法。

所以,如果你必須使用構造函數(因爲你的代碼初始化一切)你的代碼看起來就像這樣:

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { 
    var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 
    if cell == nil { 
     cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell") 
    } 

    cell.cellLabel.text = "Hello world" 
    cell.cellImage.image = UIImage(named: "funny_cat.jpg") 

    return cell 
} 

但是如果你的細胞被註冊爲重複使用,或者如果它是一個原型細胞,將只需使用

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { 
    var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 

    cell.cellLabel.text = "Hello world" 
    cell.cellImage.image = UIImage(named: "funny_cat.jpg") 

    return cell 
} 


我認爲最好的地方去尋找如何tableview中工作,你應該看看這裏的官方文檔:Table View Programming Guide for iOS

+0

明白了,但是在故事板中定製單元而不是寫所有內容更容易嗎? – Abdou023 2014-09-25 20:26:21

+0

是的,但有時你只是沒有選擇...再次看看官方文檔,你將獲得所有你需要的信息 – klefevre 2014-09-25 20:28:08

相關問題