2015-11-05 36 views
0

我試圖做一個自定義單元格是我的細胞的部分:我重寫了一些功能,如動態viewForHeaderInSection和多重的cellForRowAtIndexPath

enter image description here

對於這一點:

numberOfRowsInSection

viewForHeaderInSection

HEIGH tForHeaderInSection

我正與多個cellForRowAtIndexPath工作我使用一個if indexPath.row識別Cell並以動態的方式進行填充。

import UIKit 

class TesteTableViewController: PFQueryTableViewController { 


override func preferredStatusBarStyle() -> UIStatusBarStyle { 
    return UIStatusBarStyle.LightContent 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    loadCollectionViewData() 

} 


func loadCollectionViewData() { 

    // Build a parse query object 
    let query = PFQuery(className:"Feed") 

    // Check to see if there is a search term 


    // Fetch data from the parse platform 
    query.findObjectsInBackgroundWithBlock { 
     (objects: [PFObject]?, error: NSError?) -> Void in 

     // The find succeeded now rocess the found objects into the countries array 
     if error == nil { 

      print(objects!.count) 
      // reload our data into the collection view 


     } else { 
      // Log details of the failure 

     } 
    } 
} 


override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // #warning Incomplete implementation, return the number of sections 
    return objects!.count 
} 

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


override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    var header = tableView.dequeueReusableCellWithIdentifier("Cell2")! as! TesteTableViewCell 


    return header 
} 

override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    return 30.0 
} 


// Initialise the PFQueryTable tableview 
override init(style: UITableViewStyle, className: String!) { 
    super.init(style: style, className: className) 
} 

required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder)! 

    // Configure the PFQueryTableView 
    self.parseClassName = "Feed" 
    self.pullToRefreshEnabled = true 
    self.paginationEnabled = false 
} 



override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

var cell: TesteTableViewCell! 
    let object = objects![indexPath.section] 
if indexPath.row == 0 { 
cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TesteTableViewCell 




// Extract values from the PFObject to display in the table cell 
if let nameEnglish = object["name"] as? String { 
cell?.label1?.text = nameEnglish 

} 


} 
else{ 
cell = tableView.dequeueReusableCellWithIdentifier("Cell2", forIndexPath: indexPath) as! TesteTableViewCell 


    // Extract values 2from the PFObject to display in the table cell 
    if let nameEnglish2 = object["brief"] as? String { 
     cell?.label2?.text = nameEnglish2 


    } 

} 

return cell 
} 

} 

我的代碼我有這樣的結果:

enter image description here

我成功地填充不同的標識符兩個單元。

但是看起來這個函數在cellForRowAtIndexPath之前調用,它返回我在storyBoard中的內容,而不是我動態填充的內容。

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    var header = tableView.dequeueReusableCellWithIdentifier("Cell2")! as! TesteTableViewCell 


    return header 
} 

我真的認爲這是我的問題。 (事情發生的順序)。

任何想法?

謝謝。

+0

如果你想實現代碼如下刷新自己你得到後的數據,有tableview中調用reloadData,說像'self.tableView.reloadData()'但在你的代碼中的其他東西,不要」對我來說沒有意義。您在評論中似乎有很多內容尚未實現。您只爲每個部分返回1行。那是故意的嗎? – beyowulf

+0

我使用'loadObjects()'而不是'self.tableView.reloadData()',因爲我使用的是Parse框架,它沒有解決問題,是的,這是故意的,因爲我想模擬Instagram的feed功能 –

+0

loadObjects()獲取數據。 self.tableView.reloadData()告訴tableView有新的數據要顯示,並且它應該自己更新。您應該查找關於如何使用uitableview的教程。你的問題太寬泛,不能在一個計算器問題中討論。 – beyowulf

回答

1

您需要將cellForRowAtIndexPath中的代碼移動到row != 0,因爲該代碼塊從未執行過,導致故事板而不是動態數據呈現靜態數據。

在這種情況下,您必須爲viewForHeaderInSection方法中的單元格提供動態數據,以便您的單元格將在每次重新加載時填充該信息。

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    var header = tableView.dequeueReusableCellWithIdentifier("Cell2")! as! TesteTableViewCell 
let object = objects![section] 
if let nameEnglish2 = object["brief"] as? String { 
     header.label2?.text = nameEnglish2 
    } 
    return header 
} 
+0

完美,現在我明白了我誤解了這個概念的地方,謝謝你的解釋。 –