2015-06-12 62 views
1

我看到這裏問類似的問題,但沒有一個是對我很有幫助明確。表視圖ReloadData功能不觸發的cellForRowAtIndexPath斯威夫特

我在我的表格視圖中實現了一個搜索欄,它看起來像一切都很好,沒有任何錯誤。我仔細查看了代碼,發現了一些錯誤。於是我開始調試。

這裏是我的查詢功能:

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { 

    var filtered:[Room] = filterz(rooms, txt: searchText) 

    //println(filtered.count) 

    if(filtered.count == 0){ 
     searchActive = false 
    } else { 
     searchActive = true 
    } 

    self.tView.reloadData() 
} 

我可以看到,這是可以正常使用了,因爲它是打印出正確的數量。 但是我不確定reloadData函數。 我想,這將觸發的cellForRowAtIndexPath函數是在這裏:

func tableView(tableView:UITableView,cellForRowAtIndexPathindexPath:NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("RoomCell", forIndexPath: indexPath) as! UITableViewCell 

    var room:Room = rooms[indexPath.row] 

    if(searchActive){ 
     room = filtered[indexPath.row] 
    } 

    if let nameLabel = cell.viewWithTag(200) as? UILabel{ 

     nameLabel.text = room.name 
     println(room.name) 

    } 

    if let sizeLabel = cell.viewWithTag(201) as? UILabel{ 

     sizeLabel.text = room.size 
     println(room.size) 

    } 

    if let vacLabel = cell.viewWithTag(202) as? UILabel{ 

     vacLabel.text = room.vacant 
     println(room.vacant) 

    } 

    if let taskIm = cell.viewWithTag(203) as? UIImageView{ 

     taskIm.image = UIImage(named: room.imagename) 
    } 

    return cell 
} 

正如你可以看到我已經把print語句進行調試,並正在打印什麼。這是因爲函數沒有被觸發,或者因爲我的代碼有問題?

如果是的話,任何人都可以找到它?我所知道的肯定是最多直到reloadData()函數調用一切都可以正常使用。

+0

您正在重新聲明你的'變種filtered'只是更新現有的'filtered' – 0yeoj

+0

哈哈輝煌!發現得好! –

回答

1

你重新聲明你的var filtered剛剛更新內部使用的現有filteredcellForRowAtIndexPathindexPath

0

reloadData不調用cellForRowAtIndexpath的最常見原因是您要麼沒有正確連接數據源,要麼沒有引用正確的tableView。

確保在某處viewDidLoad你有一條線,如下所示:

self.tView.dataSource = self 

有人有類似的問題,請參見this question

另外,還可以使通過繼承UITableViewCell,並從您的標籤創建網點細胞類設置標籤上自己容易得多。這將允許您刪除整個舞蹈if let sizeLabel = cell.viewWithTag(201) as? UILabel