Swift 4: передача строки в UICollectionViewCell в UICollectionViewController - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь передать эту строку из одного UICollectionViewCell в UICollectionViewController. Я хотел бы "Давайте начнем!" перейти к моему названию навигации ... Ниже приведен мой код, и я не могу понять, почему строка не передается.

// UICOLLECTIONVIEWCELL --> This is the first UICollectionViewCell
    @objc func getStartedAction() {
        let confirmingTapActionButton1 = "Let's Get Started!"
        let signUpFlowController1 = SignUpFlowController()
        signUpFlowController1.welcomeCellPassedStringForAction1 = confirmingTapActionButton1
    }


// UICollectionViewController --> This is the second UICollectionViewController
    class SignUpFlowController: UICollectionViewController, UICollectionViewDelegateFlowLayout {

        var welcomeCellPassedStringForAction1: String? = nil

        override func viewDidLoad() {
            super.viewDidLoad()
            collectionView?.backgroundColor = .white

            // NAV BAR STUFF BELOW
            self.title = welcomeCellPassedStringForAction1

        }

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вы можете сделать это, используя протокол

Составьте протокол:

protocol NavTitleProtocol{
func setNavTitle(title: String)
}

Согласуйте ваш CollectionViewController с протоколом и переопределите метод setNavTitle:

extension YourCollectionViewController: NavTitleProtocol{
func setNavTitle(title: String) {
    self.title = title
}
} 

В вашей ячейке есть свойство делегата типа NavTitleProtocol:

class YourCollectionViewCell: UICollectionViewCell{
var delegate: NavTitleProtocol?

@objc func getStartedAction() {
    let confirmingTapActionButton1 = "Let's Get Started!"
//   let signUpFlowController1 = SignUpFlowController()
//        signUpFlowController1.welcomeCellPassedStringForAction1 = confirmingTapActionButton1
    delegate?.setNavTitle(title: confirmingTapActionButton1)
}
}

Назначьте ваш collectionViewController в качестве делегата при создании ячейки collectionView:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "YourIdentifier", for: indexPath) as! YourCollectionViewCell
    cell.delegate = self
}

Когда вы выполняете селектор в своей ячейке, будет доступен свойство делегата и будет вызван метод, который вы переопределили в вашем CollectionViewController.

0 голосов
/ 03 мая 2018

Первая эта строка

let signUpFlowController1 = SignUpFlowController()

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

func collectionView(_ collectionView: UICollectionView,
                    cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    cell.myInstance = self
}

class customCell:UICollectionViewCell {
    var myInstance:SignUpFlowController!

    @objc func getStartedAction() {
        let confirmingTapActionButton1 = "Let's Get Started!"
        myInstance.welcomeCellPassedStringForAction1 = confirmingTapActionButton1
    }
}
...