Элегантный способ решения этой проблемы - использование Делегирования. Я дам вам пример того, как вы можете решить эту проблему.
Прежде всего в TableViewCell Объявите протокол:
protocol MovieTableViewCellDelegate : class {
func movieSelection(_ movie : Movie,indexPath: IndexPath)
}
Добавьте следующий метод в ваш класс TableViewCell
func setupCell(_ movie : Movie, indexPath: IndexPath) {
self.indexPath = indexPath
self.selectedMovie = movie
movieLabel.text = movie.name
// This is just to show you selected movie
// let image : UIImage = movie.isSelected ? #imageLiteral(resourceName: "checkBoxSelected") : #imageLiteral(resourceName: "checkBoxUnselected")
// checkBoxButton.setImage(image, for: .normal)
}
Получите IBAction кнопки, которую вы хотите использовать для удаления фильма:
@IBAction func checkBoxButtonAction(_ sender: Any) {
delegate.movieSelection(selectedMovie, indexPath: indexPath)
}
Реализация метода TableView Delegate и DataSource должна выглядеть следующим образом:
extension ViewController : UITableViewDelegate,UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return listmoviesArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MovieTableViewCell", for: indexPath) as! MovieTableViewCell
cell.delegate = self
cell.setupCell(listmoviesArray[indexPath.row],indexPath: indexPath)
return cell
}
}
Делегировать реализацию для удаления фильма из списка:
extension ViewController : MovieTableViewCellDelegate {
func movieSelection(_ movie: Movie,indexPath: IndexPath) {
// Write your code here to delete movie
listmoviesArray.remove(at: indexPath.row)
moviesTableView.reloadData()
}
}