Принимая значение для didSelectItemAt для indexPath и добавьте его в делегат / протокол для заполнения ячейки заголовка - PullRequest
2 голосов
/ 22 мая 2019

Использование протокола / делегата и получение данных из didSelectItemAt (collectionViews).

// This class have the data 
// WhereDataIs: UICollectionViewController
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        //Pass some data from the didSelect to a delegate

        let test = things[indexPath.item]
        guard let bingo = test.aThing else { return }
        print("bingo: ", bingo)

Это бинго печатает значение, которое мне нужно.Так что довольно неплохо.

Теперь я не могу использовать метод протокола внутри этой функции, это плохое исполнение, поэтому компилятор или Xcode говорит: «Эй, вы объявите метод как обычный метод,не вложенный путь.

//Bridge
protocol xDelegate {
    func x(for headerCell: HeaderCell)
}
//This is the class that need the data
//class HeaderCell: UICollectionViewCell
var xDelegate: xDelegate?

//it's init()

override init(frame: CGRect) {
        super.init(frame: frame)

        let sally = WhereDataIs()
        self.xDelegate = sally

        xDelegate?.x(for: self)
}
// This extension is added at the end of the class WhereDataIs()
// Inside of this class is it's delegate.

var xDelegate: xDelegate? = nil

extension WhereDataIs: xDelegate {
    func x(for headerCell: HeaderCell) {
        //Smith value will work because it's dummy
        headerCell.lbl.text = "Smith"

       // What I really need is instead of "Smith" is the value of didselectItemAt called bingo.
headerCell.lbl.text = bingo
    }
}

Шляпа снята для всех, кто хотел бы помочь мне в этом.

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Не использует делегатов, но это будет работать

Решено:

1) перейти к контроллеру collectionView.создайте новую переменную для хранения элементов.

// Pass the item object into the xController so that it can be accessed later. 
//(didSelectItemAt)
 xController.newVar = item 

//xController class: UICollectionView... 
// MARK: - Properties 
var newVar: Thing? 

Наконец, в этом классе у вас должен быть метод viewForSupplementaryElementOfKind , в котором вы регистрируете HeaderCell, а затем просто добавляете ...

let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerId, for: indexPath) as! HeaderCell

header.lbl.text = newVar.whatEverYourDataIs

Немного общего, но это работает.:)

0 голосов
/ 22 мая 2019

Я думаю, вы можете просто добавить это в конец вашего текущего кода в didSelectItemAt indexPath:

guard let header = collectionView.supplementaryView(forElementKind: "yourElementKind", at: indexPath) as? HeaderCell else { return }

header.lbl.text = bingo

collectionView.reloadData()

Редактировать: Оставьте все остальное пока, чтобы убедиться, что вы получите хорошийСначала результат.

Дайте мне знать, если это работает, рад проверить.

...