2015-03-13 76 views
0

我有一個UITableView與屏幕上方的各種按鈕,每個按鈕關聯到一個單獨的UITableViewDataSource。每次單擊其中一個按鈕時,表視圖的數據源都會更新,並且tableView會獲取.reloadData方法,該方法會更新tableView中的所有數據。uitableview數據源以錯誤的順序重新加載swift

我在單元格中也有一個標籤,它反映了indexPath.row(),意思是每行有1,2,3等等的行數與表中的行數相同。

但是,我的問題是當表重新加載時,索引是亂序的。有時它從3,1,2,4等開始,有時候是1,2,3,4,0,0,0,0等。

tableView的單元格中還有一個圖像,它只有出現在前8行左右。

這是我的func更改dataSource。請注意,所有dataSource都在ViewController中實例化。所有數據源都是成對的,陸地/海洋,並且以嵌套陣列的形式組合在一起,每個插入陣列保存兩個數據源,因此輸入一個​​陣列。 (DataSource也從UITableViewDataSource繼承一個自定義對象)

func changeDataSource(ds: [DataSource]) -> DataSource { 
     var idx = landOrSeaSegments.selectedSegmentIndex 
     currentDS = ds 

     //If Land segment is selected, show 'Land' datasource, else show 'Sea' datasource 
     if showLandDS == true { 
      idx = 0 
      headerImage?.image = ds[idx].headerImage 
      println("Y1 Land") 
     } else { 
      idx = 1 
      headerImage?.image = ds[idx].headerImage 
      println("Y1 Sea") 
     } 
     tableView.reloadData() 
     return ds[idx] 
    } 

如果有不清楚的地方,請說出來。我對這些問題有點缺乏經驗!

編輯

這是我在每個數據庫的cellForRowAtIndexPath。它們的結構都是相同的,在textArray中有不同的值,並最終與一組圖像相同。現在圖像是靜態的。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("YCell") as YCell 
    var cellText = cell.dayDesc?.text //dayDesc is a custom label as an outlet in my YCell class. 

    cell.dayNumberLabel?.text = "\(indexPath.row + 1)" 
    cell.dayIcon?.image = UIImage(named: "icon") 

    cellText = textArray[indexPath.row] 

    return cell 
} 
+0

當單元格被重用時,你清除了這個標籤嗎?重用的單元格可以出現在表格視圖的不同位置。 – rdelmar 2015-03-13 06:21:22

+0

清除標籤?像設置爲零? – Brie 2015-03-13 06:29:59

+0

你可以添加你的'cellForRowAtIndexPath'方法嗎? – 2015-03-13 06:44:13

回答

2

這是由於單元格被重新使用而引起的。在你的UITableViewCell子類中執行

func prepareForReuse() { 
    self.textLabel.text = "" //Put your label name 
} 
+1

這似乎像兒子一樣工作,但我在桌子上滾動後開始消失 – Brie 2015-03-13 06:59:38

+1

請發佈'cellForRowAtIndexPath'方法。 – 2015-03-13 07:03:06

+0

非常感謝... – 2016-04-26 13:55:09