Вопрос о поведении UIButton внутри ячейки collectionView в Swift - PullRequest
0 голосов
/ 23 сентября 2019

Я сделал ячейку collectionView динамическим типом и поместил такую ​​информацию, как изображение, заголовок, автор и так далее.Эта информация о книге, и мы создали кнопку «просмотр» в нижней части ячейки.Когда я нажимаю ячейку

if let navigationController = segue.destination as? UINavigationController,
                let index = collectionView.indexPathsForSelectedItems?.first,

                let readBookController = navigationController.viewControllers.first as? ReadBookViewController {

                readBookController.bookNo = self.booksCategory?.books[index.row].bookNo
                readBookController.bookTitle = self.booksCategory?.books[index.row].bookTitle
            }

Этот код работает нормально.

Но когда я нажимаю кнопку внутри ячейки, поведение при нажатии ячейки (let index = collectionView.indexPathsForSelectedItems? .First) => Этот код не запускается, он просто перемещает VC.

Есть ли способ передать те же данные в VC, когда ячейка нажата и когда кнопка нажата в ячейке?

код:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        switch (segue.identifier!) {
        case "TappedCellSegue":
            if let navigationController = segue.destination as? UINavigationController,
                let index = collectionView.indexPathsForSelectedItems?.first,

                let readBookController = navigationController.viewControllers.first as? ReadBookViewController {

                readBookController.bookNo = self.booksCategory?.books[index.row].bookNo
                readBookController.bookTitle = self.booksCategory?.books[index.row].bookTitle
            }
        case "TappedBtnSegue":    // Not working
            let readVC = self.storyboard?.instantiateViewController(withIdentifier: "ReadBookViewController") as! ReadBookViewController

            if let navigationController = segue.destination as? UINavigationController,
                let index = collectionView.indexPathsForSelectedItems?.first,

                let readBookController = navigationController.viewControllers.first as? ReadBookViewController {
                readBookController.bookNo = self.booksCategory?.books[index.row].bookNo
                readBookController.bookTitle = self.booksCategory?.books[index.row].bookTitle
            }

            self.present(readVC, animated:true, completion: nil)
        default:
            break
        }
    }

1 Ответ

0 голосов
/ 23 сентября 2019

В cellForItemAt вы можете добавить цель для кнопки и дать indexPath.row:

cell.Button.tag = indexPath.row cell.Button.addTarget(self, action: #selector(buttonAction(_:)), for: .touchUpInside)

В buttonAction функцию:

@objc func buttonAction(_ sender: UIButton) {
    let index = sender.tag

    if let readBookController = navigationController.viewControllers.first as? ReadBookViewController {
        readBookController.bookNo = self.booksCategory?.books[index].bookNo
        readBookController.bookTitle = self.booksCategory?.books[index].bookTitle

        self.present(readBookController, animated: true, completion: nil)
}
...