Как быстро получить доступ к экземпляру UIStackView внутри ячейки? - PullRequest
0 голосов
/ 18 мая 2019

У меня есть stackView (называемый 'btnStack'), который содержит четыре кнопки в ячейке (класс 'PresentationCell'), которые я пытаюсь скрыть с помощью следующего кода:

func hideBtnStack() {
    let cell = collectionView.visibleCells.first as! PresentationCell

    cell.btnStack.isHidden = true

}

Однако, когда яЗапустив код, я получаю следующую ошибку:

'Поток 1: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения'

Существует ли более простой / лучший способ доступа к btnStack вcell?

Соответствующий код в cellForRowAt:

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! PresentationCell

 }

У меня также есть btnStack, объявленный в классе PresentationCell следующим образом:

class PresentationCell: UICollectionViewCell {

@IBOutlet weak var textView: UITextView!

@IBOutlet weak var btnStack: UIStackView!

}

И я сначала вызываюметод hideBtnStack в ViewDidLoad выглядит следующим образом:

override func viewDidLoad() {
    super.viewDidLoad()


    collectionView.dataSource = self
    collectionView.delegate = self

    setUpCollectionView()

    hideNavBar()

    hideBtnStack()


}

Заранее благодарим за любую помощь, которую вы можете предоставить.

Ответы [ 2 ]

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

Я думаю, что это решение может помочь вам! попробуйте это.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as? PresentationCell else { return UICollectionViewCell() }

if indexPath.item == 0 { 
    // hide your view
    cell.btnStack.isHidden = true
}

}

ПРИМЕЧАНИЕ: старайтесь избегать от force unwrapping.

Я надеюсь, что это решение работает для вас.

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

CjCoax дал мне подсказку, как решить эту проблему.Похоже, что hideBtnStack объявлен в viewDidLoad вместе с методами для collectionView, которые он выполняет перед заполнением collectionView.Я решил эту проблему, поместив задержку вокруг метода hideBtnStack, и теперь он работает.

override func viewDidLoad() {
    super.viewDidLoad()

    collectionView.dataSource = self
    collectionView.delegate = self


    setUpCollectionView()

    hideNavBar()

    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
        self.hideBtnStack()
    }


}
...