Получение IndexPath CollectionViewCell при нажатии кнопки - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь получить indexPath.row нажатой кнопки для действия удаления и выполнить переход к следующему контроллеру для подтверждения.

У меня есть collectionView со списком студентов, где есть кнопка в ячейке, где, если я нажимаю на кнопку, она должна выполнить переход к контроллеру для подтверждения действия. Проблема теперь, я не могу, кажется, получить indexPath. Я провел некоторые исследования и подобные посты, которые были найдены здесь . Мне удалось выполнить до 6 шага, когда я попытался ввести self.collectionView.indexPathForCell(cell). Ошибка показала

Неоднозначная ссылка на элемент 'collectionView (_: numberOfItemsInSection:)'

Делегат

protocol myCellDelegate: AnyObject {
    func deletePressed(cell: myCells)
}


class myCells : UICollectionViewCell{
    @IBOutlet weak var studentName: UILabel!
    @IBOutlet weak var deleteButton: UIButton!

    weak var delegate: myCellDelegate?


    @IBAction func deleteClicked(_ sender: Any) {
        delegate?.deletePressed(cell: self)
    }
}

ViewController

class RoomDetailViewController: UIViewController ,UICollectionViewDelegate,UICollectionViewDataSource,myCellDelegate {


    func deletePressed(cell: myCells) {
        let indexPath = self.collectionView.indexPathForCell(cell)
    }



    var selectedCell = 0


    var students = ["Brandon","Brenda","Louise","Angela","Arthur"]

    override func viewDidLoad() {
        super.viewDidLoad()
        customBackButton()
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return self.students.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "myCell", for: indexPath) as! myCells

        cell.studentName.text = students[indexPath.item]
        selectedCell = indexPath.row

        return cell
    }

}

Мне известно, что по этой теме indexPath было много сообщений, но ни один из них не смог решить мою проблему. Кто-нибудь знает, что пошло не так?

1 Ответ

1 голос
/ 07 ноября 2019

Это представление коллекции, а не представление таблицы. Используйте indexPath(for:), а не indexPathForCell.

let indexPath = self.collectionView.indexPath(for: cell)

Также необходимо установить делегат ячейки в cellForItemAt:

cell.delegate = self
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...