2016-07-23 84 views
0

我有一個小小的麻煩與按鈕上的tableview。tableviewcell重複uibuttons

我有一個tableViewCell,我用3個按鈕進行了自定義。我將這些按鈕設置爲隱藏在界面構建器中,並且當表格加載按鈕隱藏時如預期的那樣。

然後,我在調用didSelectRow時將tableview的隱藏屬性設置爲false,並在調用didDeselectRow時將hidden.true設置爲false。這工作也很好。問題是設置爲在didSelectRow中可見的按鈕每7個單元格也可見。他們不斷重複自己。

下面是顯示的按鈕

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let cell = tableView.cellForRowAtIndexPath(indexPath) as! ContactsViewCell 

      print("Table selected") 

       cell.insertEmailButton.hidden = false 
       cell.insertPhoneButton.hidden = false 
       cell.insertAllButton.hidden = false 
       cell.contactTextLabel.alpha = 0.2 
       cell.contactDetailTextLabel.alpha = 0.2 
     } 

的代碼,這就隱藏了他們當tableViewCell被取消

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
     let cell = tableView.cellForRowAtIndexPath(indexPath) as! ContactsViewCell 

     cell.insertEmailButton.hidden = true 
     cell.insertPhoneButton.hidden = true 
     cell.insertAllButton.hidden = true 
     cell.contactTextLabel.alpha = 1.0 
     cell.contactDetailTextLabel.alpha = 1.0 
    } 

我做了一些研究,我瞭解到這可能是與按鈕的排.hidden設置爲false將被tableview重用。但我從文檔中瞭解到,被重用的單元格來自cellForRowAtIndexPath,而不是didSelectRow中的單元格,我將button.hidden設置爲false。

我也試過在cellForRowAtIndexPath的if語句中使用cell.isSelected屬性來隱藏和顯示按鈕,但是這根本不顯示按鈕。

在此先感謝您的幫助

回答

0

的實現代碼如下重用當表滾動細胞的視圖,以節省內存。因此,例如,當您將該按鈕設置爲可見(在didSelectRow內)並向下滾動表格時,tableview將取出頂部可見屏幕外的單元格並將其重新用於底部,以保存創造新單元的開銷,提高性能。

這就是爲什麼,你在細胞上以前的屬性重複。

要獲得滾動細胞所需的隱藏按鈕,我建議設置button.hidden至真/假的

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

這將按鈕設置爲隱藏,每當一個新行滾動到可見的視圖區域。

希望這會有所幫助。

+0

謝謝。我確實使用,如果細胞。isSelected在cellForRowAtIndexPath中設置按鈕的隱藏屬性true和false,但是根本沒有顯示按鈕。 –

+0

你能給出更多關於你想要的結果的信息嗎? –

+0

它沒什麼複雜的。我只想要一個帶有聯繫人的桌面視圖,當一個單元格被輕敲時,標題和副標題淡入淡出,並顯示3個按鈕。當另一個單元格被選中時,初始單元格恢復其alpha並隱藏按鈕,而新選擇的單元格顯示按鈕並淡入標題。 –

0

我解決了循環按鈕隱藏他們,當我檢查cellForRowAtIndexPath中取消選擇單元格。這也意味着我選擇的任何單元格都將失去其選定狀態,並且按鈕在離開視圖時會消失。 我可以忍受這一點。

if cell.selected == false{ 
     cell.emailButton.hidden = true 
     cell.phoneButton.hidden = true 
     cell.allButton.hidden = true 
    } 
0

UITableView重用其單元格來提高性能。所以,你不能這樣做。我們要做的就是像其他tableview單元格信息一樣標題,說明,拇指圖像等,我們還需要保存數組中按鈕的狀態。當您想隱藏單元格的按鈕時,從數組中獲取索引對象並更改按鈕的按鈕狀態並重新加載該表格視圖單元格。如果您遇到問題或難以理解,請隨時詢問。