как выполнить класс collectionView из другого ViewController - PullRequest
2 голосов
/ 30 июня 2019

у меня есть collectionView класс

class LC: UIViewController,UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{

//in LC

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let VC = segue.destination as? VC2 {
        VC.Rpe = Pass
    }
}

он работает нормально , в VC2 у меня есть функция, когда она выполняется, она должна переходитьк следующей ячейке в collection view

я не уверен, как или как это лучше всего сделать (reload VC2 со следующими collection view cell подробностями ?,или запустите функции collection view программно)

update

import Foundation
import UIKit

class View2: UIViewController {

@IBOutlet var Q_Pic: UIImageView!
@IBOutlet var Q_que: UILabel!
var SelectedCell: Ques!

override func viewDidLoad() {
    super.viewDidLoad()

    Q_Pic.image = UIImage(named: SelectedCell.LIMG)
    Q_que.text = SelectedCell.Q
}

@IBAction func herewego(_ sender: Any) {
    print("when the user press this button it should take him directly to the next cell detail , i don't want the user to go back to collection view and choose the next cell")
}
}

data

let Q_A_TEST_MOH = [
Ques(Q: "Q1? ",LIMG: "1"),
Ques(Q: "Q2? ",LIMG: "2"),
Ques(Q: "Q3?",LIMG: "3"),
Ques(Q: "Q4?",LIMG: "4"),
Ques(Q: "Q5?",LIMG: "5")
]

struct Ques {
var Q : String
var LIMG: String
}

UICollectionViewController

import Foundation
import UIKit

class test:UIViewController,UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {

@IBOutlet var CollectionView: UICollectionView!
var Levelssss: [Ques]!
var ToPass: Ques!
var SelectedCategory: String!
var Level: Int!
override func viewDidLoad() {
    super.viewDidLoad()
    CollectionView.delegate = self
    CollectionView.dataSource = self
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return Q_A_TEST_MOH.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "LevelCell2", for: indexPath) as? cell1 {
        let r = Q_A_TEST_MOH[indexPath.item]
        cell.congigureCell(EditLater: r)
        return cell
    }
    return UICollectionViewCell()
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    ToPass = Q_A_TEST_MOH[indexPath.item]
    performSegue(withIdentifier: "To", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let detalsVC = segue.destination as? View2 {
        detalsVC.SelectedCell = ToPass
    }
}
}

UICollectionViewCell

import UIKit

class cell1: UICollectionViewCell {

@IBOutlet var BB: UIButton!

override func awakeFromNib() {
    super.awakeFromNib()
    BB.layer.cornerRadius = 10
}

func congigureCell(EditLater: Ques){
    BB.setImage(UIImage(named: EditLater.LIMG), for: .normal)
}
}

Скачать проект отсюда: скачать проект

1 Ответ

0 голосов
/ 01 июля 2019

Вот фиксированный вариант: https://www.dropbox.com/s/bc7ktktrbqg9x7t/test%202.zip?dl=0

Логика проста: передать весь массив данных и индекс выбранного объекта.

В VC2 при нажатии кнопки вы просто увеличиваетеиндексировать и обновлять содержимое ваших представлений.

Теперь вам нужно просто проверить, индекс не больше, чем количество элементов в массиве.

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