UICollectionView - Не отображать ячейки

То, что я пытаюсь достичь, это таблица 3x3 с UICollectionView. Но при запуске приложения он просто не отображает никаких ячеек. Он отображает цвет фона CollectionView, хотя (который я установил в синий цвет) Может ли кто-нибудь помочь мне здесь?

То, что я сделал, это создать storyboard и просто перетащить a CollectionViewController на него. Этот контроллер также ввел в него вложенный CollectionView. Затем я просто использовал настройки, чтобы сделать свой фон синим и добавить к нему ячейку, из которой я сделал фиолетовый фон (как для тестирования). Наконец перетащил на него UILabel. Теперь при запуске он просто отображает синий фон, но не содержит ячеек, хотя они хорошо видны в редакторе. Затем я попытался создать пользовательский UICollectionViewController, назначить класс CollectionViewController вместо стандартного класса и сделать то же самое с ячейкой (назначить пользовательский UICollectionViewCell). В пользовательском UICollectionViewController я реализовал следующие методы:

-(NSIntegear)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 1;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 9;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    AboutYourGoalsMultiSelectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
    [[cell goal]setText:@"T"];

    return cell;
}

Я установил идентификатор ячейки в ячейку и сделал выходное соединение dataSource и делегировал между CollectionView и пользовательским UICollectionViewController. Все прекрасно компилируется. Так что я пропущу? Разве он не показал что-то еще, прежде чем делать все эти настройки, просто используя редактор?

The storyboard editor with all the changes I did

Ответы

Ответ 1

Поскольку я не нашел прямого решения, я попытался создать новый проект и сделал те же изменения и настройки, и на удивление, на этот раз все сработало с самого начала. Затем я скопировал раскадровку в свой старый проект, удалил все старые файлы и заменил его на файлы из нового проекта. Пока все работает хорошо. Я понятия не имею, какова была фактическая ошибка, но я рад, что она работает сейчас. Спасибо всем, кто посмотрел мой вопрос!

Ответ 2

См. мой ответ здесь, одним словом, вам нужно удалить эту строку, если вы работаете с раскадрой:

 // Register cell classes
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];

Ответ 3

Общим источником ошибок является то, что dataSource и делегат не установлены в Outlets

Ответ 4

У вас есть ошибка в первой строке вашего кода.

-(NSIntegear)numberOfSectionsInCollectionView:(UICollectionView *)collectionView

NSIntegear должен быть NSInteger.

Не уверен, что проблема связана с тем, что xcode не должен позволять вам запускать проект с этой ошибкой. Я просто попытался выполнить те же самые шаги, которые вы упомянули (без метки), но с приведенной выше коррекцией, и это сработало для меня. Вот скриншот:

enter image description here

Ответ 5

Если вы пытаетесь создать просто простой CollectionViewController (не настраиваемый, то есть по реализации), и ваши ячейки не будут отображаться при запуске приложения, выполните следующие действия: -

  • Прежде всего вам нужно создать класс cocoa touch (если не создан) для вашего UICollectionViewController. FILE → NEW → cocoa TOUCH CLASS, затем выберите UICollectionViewController из выпадающего списка подкласса.
  • Теперь под секцией инспектора личных данных вашего CollectionViewController добавьте свой класс, выбрав из выпадающего списка Custom Class.
  • Теперь откройте созданный класс и отредактируйте свои методы следующим образом:

    override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    //#warning Incomplete method implementation -- Return the number of sections
    return 1
     }
     override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    //#warning Incomplete method implementation -- Return the number of items in the section
    return 1
    }
    
  • Только отредактируйте значение "return" (по умолчанию 0) просто напишите количество ячеек/элементов, которые вы хотите отобразить или создали (в этом случае здесь я создал только одну ячейку).

[ios] [swift3] [xcode]