Выбор конкретных ячеек в 3 различных коллекциях CollectionView для выполнения перехода к определенному контроллеру представления - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть 3 отдельных collectionViews в одном контроллере представления с 3 элементами в каждом представлении collection.Я хочу, чтобы пользователь выбрал 1 ячейку из каждого collectionView, и в зависимости от того, что выбрано, он переходит к конкретному контроллеру представления.

Я знаю, что, возможно, есть какая-то логика, связанная с тем, что я в настоящее время использую операторы If, Else. Я также использую didSelectItemAt, используя executeSegueWithIdentifier для каждой ячейки collectionView, но эта проблема всегда происходит, когда пользователь просто выбирает 1 ячейку водин сборникПросмотр Я не понял, куда я иду не так.

Вот код, с которым я работал;

class ViewController: UIViewController, UICollectionViewDelegate,UICollectionViewDataSource {

  @IBOutlet weak var collectionViewRed: UICollectionView!

  @IBOutlet weak var collectionViewBlue: UICollectionView!

  @IBOutlet weak var collectionViewGreen: UICollectionView!

  var redColors = ["Red", "Infrared", "Crimson"]

  var blueColors = ["Blue", "Light Blue", " Navy Blue"]

  var greenColors = ["Green", "Lime Green", "Forest Green"]


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

 if collectionView == self.collectionViewRed {

   let cellA = collectionViewRed.cellForItem(at: indexPath) as!     
   CollectionViewCell

   self.performSegue(withIdentifier: "ShowNextView", sender nil)

 } else if collectionViewBlue == self.collectionViewBlue {

   let cellB = collectionViewBlue.cellForItem(at: indexPath) as! 
   CollectionViewCell

   self.performSegue(withIdentifier: "ShowNextView", sender: nil)

 } else if collectionView == self.collectionViewGreen {

   let cellC = collectionViewGreen.cellForItem(at: indexPath) as!   
   CollectionViewCell

}


}

Когда пользователь нажимает «Красный»в Red CollectionView он выполняет переход к следующему ViewController вместо того, когда пользователь выбирает «Red» из «redCollectionView», затем «Blue» из «blueCollectionView» и, наконец, «Green» из «greenCollectionView» для выполненияпереход к конкретному ViewController.

Какой код следует использовать вместо этого, чтобы позволить пользователю выбрать 1 элемент из каждого collectionView и затем выполнить переход?

1 Ответ

0 голосов
/ 08 апреля 2019

У вас должно быть 3 Bools, хранящих состояния выбранных ячеек для всего представления коллекции

Инициализируйте их как ложные

var isFirstCollectionViewSelected = false
var isSecondCollectionViewSelected = false
var isThirdCollectionViewSelected = false

// You can also use this for the states, in that case you would not even need the above variables 
var firstSelectedIndex: Int?  

Так что ваш didSelectItemAt будет выглядеть как

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

 if collectionView == self.collectionViewRed {
   isFirstCollectionViewSelected = true

   self.firstSelectedIndex = indexPath.row

   // Add logic here when this cell is selected  

 } else if collectionView == self.collectionViewBlue {
   isSecondCollectionViewSelected = true

   // Add logic here when this cell is selected  

 } else if collectionView == self.collectionViewGreen {
   isThirdCollectionViewSelected = true

   // Add logic here when this cell is selected 

 }

 performSegueIfAllAreSelected()
}

Где performSegueIfAllAreSelected() будет

func performSegueIfAllAreSelected() {

  if isFirstCollectionViewSelected, isSecondCollectionViewSelected, isThirdCollectionViewSelected { 
     if self.firstSelectedIndex == 1 {  
      self.performSegue(withIdentifier: "ShowNextView", sender: nil)
     } else {
     //
     }

  }

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