удалить строки элементов при нажатии на галочку - PullRequest
0 голосов
/ 18 января 2019
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var tableview: UITableView!
var headerLabel:String!
var ListmoviesArray:[UIImage]!
override func  viewDidLoad()   {
    super.viewDidLoad()
titleLabel.text = headerLabel
                }
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return ListmoviesArray.count
                }
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->  UITableViewCell {
let cell = self.tableview.dequeueReusableCell(withIdentifier: "ListTableViewCell", for: indexPath) as! ListTableViewCell
    cell.myImageView.image = ListmoviesArray[indexPath.row]
    cell.btnCheckMark.addTarget(self, action: #selector(checkMarkButtonClicked),  for: .touchUpInside)
    cell.selectionStyle = .none

return cell
                 }
@objc func checkMarkButtonClicked ( sender: UIButton)   {
  sender.isSelected = !sender.isSelected
    if sender.isSelected {
    sender.setImage(UIImage(named: "Checked"), for: .normal)
    } else {
        sender.setImage(UIImage(named: "UnChecked"), for: .normal)
    }

    }

}

[Я хочу, чтобы мои выбранные изображения были удалены, нажав на кнопку удаления, эти изображения получены с моего предыдущего контроллера 1

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Элегантный способ решения этой проблемы - использование Делегирования. Я дам вам пример того, как вы можете решить эту проблему.

Прежде всего в 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()
    }
}
0 голосов
/ 18 января 2019

@ Рахул проверьте следующий код:

class Movie : NSObject {
    var imageName: String!
    var selected: Bool!
}

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableview: UITableView!
    var headerLabel:String!
    var ListmoviesArray:[Movie]!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        // Add your data of type Movie here
        ListmoviesArray = [ ]
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->  UITableViewCell {
        let cell = self.tableview.dequeueReusableCell(withIdentifier: "ListTableViewCell", for: indexPath) as! ListTableViewCell
        cell.imageView?.image = UIImage(named: ListmoviesArray[indexPath.row].imageName)
        cell.btnCheckMark.addTarget(self, action: #selector(checkMarkButtonClicked),  for: .touchUpInside)
        cell.btnCheckMark.tag = indexPath.row
        cell.btnCheckMark.setImage(UIImage(named: ListmoviesArray[indexPath.row].selected ? "Checked" : "UnChecked"), for: .normal)
        cell.selectionStyle = .none

        return cell
    }

    @objc func checkMarkButtonClicked ( sender: UIButton)   {
        sender.isSelected = !sender.isSelected
        ListmoviesArray[sender.tag].selected = sender.isSelected
        if sender.isSelected {
            sender.setImage(UIImage(named: "Checked"), for: .normal)
        } else {
            sender.setImage(UIImage(named: "UnChecked"), for: .normal)
        }
    }

    @IBAction func deleteButtonTapped(_ sender: UIButton) {
        for selectedItem in ListmoviesArray {
            if (selectedItem.selected == true) {
                ListmoviesArray.remove(at: sender.tag)
            }
        }
        tableview.reloadData()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...