Почему выход UICollectionViewCell nil?

Я создал пользовательский UICollectionViewCell в построителе интерфейсов, привязал его к классу, а затем, когда я хочу использовать и установить строку для метки в строке, метка имеет значение nil.

override func viewDidLoad() {
    super.viewDidLoad()

    // Register cell classes
    self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")
}

override func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! {

    var cell: LeftMenuCollectionViewCell
    cell = collectionView.dequeueReusableCellWithReuseIdentifier("ls", forIndexPath: indexPath) as LeftMenuCollectionViewCell
    println(cell.label) // <- this is nil, why??
    cell.label.text = "asd"

    return cell
}

И подклассифицированная ячейка:

class LeftMenuCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var activityIndicatorView: UIActivityIndicatorView!
}

Ответ 1

Я снова вызываю self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls"). Если вы используете раскадровку, вы не хотите называть это. Он перезапишет то, что у вас есть в раскадровке.

Если у вас все еще есть проблема, проверьте, что reuseIdentifier тот же в dequeueReusableCellWithReuseIdentifier и в storyboard.

Ответ 2

Просто удалите эту строку:

self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")

Ответ 3

Если вы используете xib, убедитесь, что вы добавили эту строку кода в свою viewdidload.

Цель C:

[self.collectionView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellWithReuseIdentifier:@"MyCellIdentifier"];

Swift:

collectionView.register(UINib(nibName:"MyCell", bundle: nil), forCellWithReuseIdentifier:"MyCellIdentifier")

Ответ 4

Нужно зарегистрировать это перо!

collectionView.register(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "CustomCellId")

Ответ 5

У меня была аналогичная проблема. Я использую раскадровку и набираю reuseIdentifier одинаково везде. В раскадровке на ячейке и в методе ниже:

override func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell!

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

class CustomCell: UICollectionViewCell { @IBOutlet weak var myLabel: UILabel! }

Ответ 6

У меня была аналогичная проблема, но моя ошибка заключалась в том, что я не делегировал CollectionViewCell, чтобы иметь возможность изменять текст ярлыка.

Ответ 7

Похоже, что есть два способа регистрации, и я первым использовал неправильный. У меня есть пользовательское представление xib, зарегистрированное со вторым параметром, и у нас есть данные!

1:

collectionView?.register(YourItemClassName.self, forCellWithReuseIdentifier: "yourIdentifier") 

2:

collectionView?.register(UINib(nibName: "YourItemClassName", bundle: nil), forCellWithReuseIdentifier: "yourIdentifier")