swift ios как получить доступ к данным из представления коллекции

У меня есть код ниже в представлении коллекции и его результат, что я хочу знать, это как получить доступ к этим данным из моего представления коллекции в мою функцию подготовки. Я хочу получить значение getTempDetails лайк

getTempDetails["name"] as! String 

быть ценностью моего

destination.chore_name = getTempDetails["name"] as! String

но я не могу получить к нему доступ. Спасибо

код для подготовки

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let distanation = segue.destination as? ChoreDetailsViewController {
            distanation.chore_name  = "Hi"
        }
    }

код для

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        // handle tap events
//        print("You selected cell #\(indexPath.item)!")
//        print("emong gepili:" , titleArray[indexPath.row])

        if indexPath.row == 0 {
            performSegue(withIdentifier: "goToSegue", sender: nil)
        } else {
              performSegue(withIdentifier: "gotoDetails", sender: nil)
            print("You selected cell #\(indexPath.item)!")
            if let getTempDetails: [String : Any] = getAllDetail[indexPath.row] {
                print("You selected ID #\( getTempDetails["reward"] as? String  ?? "" )!")
                print("You selected ID #\( getTempDetails["desc"] as? String  ?? "" )!")
                print("You selected ID #\( getTempDetails["sched"] as? String  ?? "" )!")

3 ответа

Решение

Используйте ключевое слово indexPathsForSelectedItems для коллективного просмотра

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
{
      if segue.identifier == "gotoDetails" , 
       let nextScene = segue.destination as? ChoreDetailsViewController , 
       let indexPath = self.yourCollectionViewName. indexPathsForSelectedItems().first  {
        if let getTempDetails: [String : Any] = getAllDetail[indexPath.item] {
                print("You selected ID #\( getTempDetails["reward"] as? String  ?? "" )!")
                print("You selected ID #\( getTempDetails["desc"] as? String  ?? "" )!")
                print("You selected ID #\( getTempDetails["sched"] as? String  ?? "" )!")

     nextScene.chore_name = getTempDetails["name"] as! String
    }
   }
   }

Возможно, вы можете использовать:

var strReward:String = String()
var strDesc:String = String()
var sreSched:String = String()


func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    if indexPath.row == 0 {
        performSegue(withIdentifier: "goToSegue", sender: nil)
    } else {
        performSegue(withIdentifier: "gotoDetails", sender: nil)
        print("You selected cell #\(indexPath.item)!")
        if let getTempDetails: [String : Any] = getAllDetail[indexPath.row] {
            strReward = (getTempDetails["reward"] as? String)!
            strDesc = (getTempDetails["desc"] as? String)!
            sreSched = (getTempDetails["sched"] as? String)!
        }
    }
}

Передайте эти данные следующему VC или можете использовать их любым удобным для вас способом.

Примечание:- Я не уверен, к какому типу данных относятся данные, я предположил, что String тип. Вы можете использовать соответственно

Вы можете хранить данные о последних выбранных элементах в классе var

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if indexPath.row == 0 {
            performSegue(withIdentifier: "goToSegue", sender: nil)
        } else {
            if let getTempDetails: [String : Any] = getAllDetail[indexPath.row],
            let name = getTempDetails["name"] as? String {
              selectedChoreName = name
              performSegue(withIdentifier: "gotoDetails", sender: nil)
            }

а потом

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let distanation = segue.destination as? ChoreDetailsViewController {
            distanation.chore_name = selectedChoreName
            selectedChoreName = "" //optional
        }
    }
Другие вопросы по тегам