2017-08-31 60 views
0

一天的好時光,在我的應用程序中,我有一個tableview和自定義單元格,單元格中有標籤,按鈕和progressBar,這樣當我點擊按鈕下載進度和progressBar顯示進度時,但是當我向下滾動時,我意識到那裏是其他細胞被選中,並顯示進展,當我再次向上滾動我選定的細胞停止進展。你能幫助,任何反饋讚賞)如何僅選擇帶按鈕的輕觸單元格?

這是我TableViewController:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    return titles.count 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! ViewControllerTableViewCell 
     cell.pesnya.text = titles[indexPath.row] 
     cell.pevets.text = artists[indexPath.row] 
     cell.url = urls[indexPath.row] 
    return (cell) 
} 

@IBAction func buttonPressed(_ sender: AnyObject) { 
    (sender as! UIButton).isSelected = !(sender as! UIButton).isSelected 
    if (sender as! UIButton).isSelected { 
     if let indexPath = tableView.indexPath(for: sender.superview!?.superview as! UITableViewCell) { 
      DownloadManager.shared.download(url: urls[indexPath.row], title: titles[indexPath.row]) 
     } 
    } else { 
     //   (sender as! UIButton).setTitle("Удалить", for: UIControlState.normal) 
     if let indexPath = tableView.indexPath(for: sender.superview!?.superview as! UITableViewCell) { 
      let name = "\(titles[indexPath.row]).mp3" 
      let name2 = name.replacingOccurrences(of: " ", with: "") 
      let filePathURL = URL(string:"string") 
      do { 
       try FileManager.default.removeItem(at: filePathURL!) 
      } catch { 
       print("Could not delete file: \(error)") 
      } 
     } 
    } 

} 
+0

你有你的按鈕狀態保存在數據源。 – Jaydeep

回答

0

這是因爲當你滾動表視圖單元格將被重用。將視圖設置爲單元格prepareForReuse中的初始狀態。就像這樣:

class ACell: UITableViewCell { 
    override func prepareForReuse() { 
     view.hidden = true 
    } 
} 
+0

你的答案几乎有幫助,但是當我在這裏設置按鈕isSelected = false時,我選中的按鈕也不會被選中,對我來說這個錯誤,你怎麼看? – alikhan

+0

@Oklahoma你應該恢復表視圖數據源的狀態,主要是在tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath) - > UITableViewCell' – Lumialxk

+0

正確的方式使用'UITableView'是內部管理數據,所以所有選擇應該存儲在您的數據模型中,而不是按鈕屬性。 – Legoless

0

試試這個: -

override func tableView(_ tableView: UITableView, numberOfRowsInSection 
section: Int) -> Int 
{ 
return titles.count 
} 

override func tableView(_ tableView: UITableView, cellForRowAt 
indexPath: IndexPath) -> UITableViewCell 
{ 
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: 
indexPath) as! ViewControllerTableViewCell 
cell.pesnya.text = titles[indexPath.row] 
cell.pevets.text = artists[indexPath.row] 
cell.url = urls[indexPath.row] 
// Create IBOutlet for button 
cell.btnPressed.tag = indexPath.row 
cell.btnPressed.addTarget(self, action: #selector(self.buttonPressed(sender:)), for: .touchUpInside) 

if cell.btnPressed.isSelected { 
    DownloadManager.shared.download(url: urls[indexPath.row], title: titles[indexPath.row]) 
}else { 
    let name = "\(titles[indexPath.row]).mp3" 
    let name2 = name.replacingOccurrences(of: " ", with: "") 
    let filePathURL = URL(string:"string") 
    do { 
     try FileManager.default.removeItem(at: filePathURL!) 
    } catch { 
     print("Could not delete file: \(error)") 
    } 

} 

return (cell) 
} 

@IBAction func buttonPressed(_ sender: UIButton) { 
let indexPath = IndexPath(row: sender.tag, section: 0) 
if let cell = tableView.cellForRow(at: indexPath) as? 
    ViewControllerTableViewCell { 
    cell.btnPressed.isSelected = !cell.btnPressed.isSelected 
    tableview.reloadData() 
    } 

} 
相關問題