#swift
Вопрос:
Я просто тестирую код, чтобы проверить, может ли он загрузить представление коллекции. Но удостоверение личности ничего не показывает. Пожалуйста, посмотрите на приведенный ниже код и дайте мне знать, где я ошибаюсь.
import UIKit private let reuseIdentifier = "Cell" class FeedController: UICollectionViewController { //MARK: - Lifecycle override func viewDidLoad() { super.viewDidLoad() configureUI() collectionView.dataSource = self collectionView.delegate = self self.collectionView.reloadData() } //MARK: - Helpers func configureUI() { collectionView.backgroundColor = .white collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier) } } //MARK:- UICollectionViewDataSource extension FeedController { override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -gt; Int { return 5 } override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -gt; UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) cell.backgroundColor = .systemRed return cell } } extension FeedController: UICollectionViewDelegateFlowLayout { func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -gt; CGSize { return CGSize(width: view.frame.width, height: 200) } }
Комментарии:
1. Вы не должны регистрировать значение по умолчанию
UICollectionVievCell
2. Это ничего не меняет.
3. @vadian есть ли что-нибудь еще, что я могу сделать, чтобы проверить, работает ли это?
Ответ №1:
Установите где-нибудь точку останова viewDidLoad
, чтобы проверить, вызывает ли она вообще какой-либо код этого класса при запуске приложения.
Обычно вы получаете сообщение об ошибке при установке dataSource
и delegate
в a UICollectionViewController
, потому что они уже установлены контроллером. Из-за этого переместите дополнительные строки в основной класс и удалите расширение.
Ответ №2:
Вам необходимо инициализировать FeedController
с помощью public init(collectionViewLayout layout: UICollectionViewLayout)
инициализатора UICollectionViewController, иначе у вас нет макета, назначенного UICollectionView.
Где бы вы ни занимались FeedController()
, вы должны делать FeedController(collectionViewLayout: UICollectionViewFlowLayout())
или какой-то пользовательский UICollectionViewLayout.