Почему выход 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")