2017-01-17 7 views
0

Я провожу много времени .. но я не могу понять, почему он не работает. Cell для указательного пути, вызываемого и правильно заданного значения, но класс ячейки я нашел nil ценность .. если вам нужна какая-либо информация, то дайте мне знать.переменная ячейки равна нулю, где значение установлено setview path path

в моем CollectionView путь индекса

enter image description here

в CollectionView клетки

enter image description here

вот мой код:

для CollectionView:

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

     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: menuBarItemDetailId, for: indexPath) as! MenuBarItemDetail 
     cell.shopCategory = "600" 
     print(cell.shopCategory) 
     return cell 
    } 

для клетки:

class MenuBarItemDetail: UICollectionViewCell , UITableViewDataSource , UITableViewDelegate { 
    var shopCategory : String? 

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

     print("shopCategory :-> ...i am calling from cell :\(shopCategory)") 
} 
+0

Ставка ¥ особые пометки Для покупок необходима авторизация использование печать (cell.shopCategory)! –

+0

да! Я уже сделал это, пожалуйста, проверьте 1-ое изображение, но не получится .. вы имели в виду, что один –

+0

@Lalitkumar да необязательное значение использовать это как мое первое изображение –

ответ

3

Поскольку ваш метод awakeFromNib называется первым, а затем cellForRow .ВЫ присваивают значение переменных в cellForRow поэтому, когда первый проект выполняет его значение nil.

Решение

  1. переменная в пользовательской cellclass

    var myVar : String?

  2. Создание метода в пользовательском cellclass

    func myMethod(str : String){ myVar = str print("var : \(myVar)")
    }

  3. в cellForItem, вызовите функцию как этот

cell.myMethod(str: "343")

Выход

enter image description here

+0

прежде всего, я не использовал awakeFromNib где-нибудь в моем проекте, если это так, что это за решение. Можете ли вы мне посоветовать, что можно сделать? –

+1

Метод Init также называется первым, проверьте его. –

+0

да кажется. Что я могу сделать ? Каково решение, пожалуйста, –

2

Когда вы пишете

let cell = collectionView.dequeueReusableCell(withReuseId`entifier: "MenuBarItemDetail", for: indexPath) as! MenuBarItemDetail` 

В это время вызывается «переопределить init (frame: CGRect)». , и никакое значение не присвоено shopCategory во время init, это причина, по которой вы получаете нуль.

Добавить функцию «getShopCategory» в MenuBarItemDetail и когда вы хотите получить доступ к значению shopCategory, вы можете получить это с помощью функции getShopCategory.

import Foundation 
import UIKit 

    class MenuBarItemDetail: UICollectionViewCell { 
     var shopCategory : String? 

     func getShopCategory() { 
     print("shopCategory :-> ...i am calling from cell :\(shopCategory)") 
     } 


    } 

контроллер класс

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

     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MenuBarItemDetail", for: indexPath) as! MenuBarItemDetail 
     cell.shopCategory = "600" 
     print(cell.shopCategory) 
     cell.getShopCategory() 
     return cell 
    } 

клетка является текущим экземпляром MenuBarItemDetail так он будет возвращать присвоенное значение из shopCategory

Пожалуйста, дайте мне знать, если он работает для вас. Thank you

+0

благодарит за вашу помощь –