Не удается получить ключ базы данных 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 по выбранному индексу ячейки.