Не удается получить ключ базы данных Firebase для выбранной ячейки в UICollectionView

У меня был предыдущий опыт работы с Android, и я надеялся перевести один из методов на iOS:

viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Log.v("TAG", model.toString());
                        Log.v("TAG","ONCLICKED");
                        Intent toPoll = new Intent(getActivity(), PollHostActivity.class);
                        //TODO: Go back to clicked item when navigating from Poll Fragment back to LiveFragment
                        toPoll.putExtra("POLL_ID", mFireAdapter.getRef(viewHolder.getAdapterPosition()).getKey());
                        startActivity(toPoll);
                 }
                });

В этом методе я могу получить доступ к ключу Firebase выбранного элемента и передать его следующему действию. В iOS (Swift) я хочу получить ключ и перейти на новый ViewController. Это немного смущает меня, поскольку я знаю, что это связано с методом делегата UICollectionView. Вот мой код:

    import UIKit
    import FirebaseDatabase
    import FirebaseDatabaseUI
    import FirebaseStorageUI
    import Material


private let reuseIdentifier = "PollCell"

class TrendingViewController: UICollectionViewController {

    var ref: FIRDatabaseReference!
    var dataSource: FUICollectionViewDataSource!
    fileprivate var menuButton: IconButton!


    override func viewDidLoad() {
        super.viewDidLoad()

        ref = FIRDatabase.database().reference()
        prepareMenuButton()


        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Register cell classes

        self.dataSource = self.collectionView?.bind(to: self.ref.child("Polls")) { collectionView, indexPath, snap in
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! PollCell
            /* populate cell */
            cell.pollQuestion.text = snap.childSnapshot(forPath: "question").value as! String?
            let urlPollImage = snap.childSnapshot(forPath: "image_URL").value as! String?
            cell.imageView.sd_setImage(with: URL(string: urlPollImage!), placeholderImage: UIImage(named: "Fan_Polls_Logo.png"))
            //Comment
            return cell
        }

        // Do any additional setup after loading the view.
    }

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

public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    print(indexPath)
}


extension TrendingViewController {
    fileprivate func prepareMenuButton() {
        menuButton = IconButton(image: Icon.cm.menu)
  }
}

РЕДАКТИРОВАТЬ: После публикации на форуме FirebaseUI я смог определить, что мне нужно добавить слой в следующую строку кода, как бы я применил его к моему сценарию?:

- (FIRDataSnapshot *)snapshotAtIndex:(NSInteger)index;

1 ответ

Реализуйте следующее в вашем didSelectItemAt метод делегата.

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let selectedSnapshot = self.dataSource.items[indexPath.row]))
    print(selectedSnapshot.key)
}

Это вытягивает из вашего источника данных FirebaseUI по выбранному индексу ячейки.

Другие вопросы по тегам