Я пытаюсь реализовать UICollectionView
внутри a UIView
, но я не могу узнать, как это сделать. Существует много учебников по использованию UICollectionView
с UICollectionViewController
, но не как реализовать его в обычном представлении.
Как вы это делаете?
UICollectionView внутри UIView
Ответ 1
1) Перетащите UICollectionView
в UIView
и соответствующим образом настройте его.
2) Создайте свойство, которое также является IBOutlet
в вашем файле .h
для представления коллекции:
@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;
3) Снова в вашем файле .h
объявите своих делегатов, так что теперь ваш .h
должен выглядеть примерно так:
@interface UtaQuickView : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate> {
}
@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;
4) Подключите myCollectionView
IBOutlet
к вашему раскадровке.
5) (необязательно) Если вы нацеливаете что-то старше, чем iOS6, синтезируйте свой myCollectionView
. Если вы ориентируетесь на iOS6, он будет автоматически синтезировать его для вас. Это касается всех свойств, а не только UICollectionViews
. Поэтому в iOS6 вам не нужно @synthesize myCollectionView = _myCollectionView
вообще. Вы можете просто использовать _mycollectionview
везде, где вам нужно получить доступ к свойству.
6) В вашем .m
файле viewDidLoad
установите delegate
и dataSource.
_myCollectionView.delegate = self;
_myCollectionView.dataSource = self;
7) Внедрите необходимые методы dataSource:
#pragma mark - UICollectionView DataSource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
Оттуда вы можете реализовать столько или меньше методов UICollectionViewDelegate
, сколько вам нужно. Однако в соответствии с документацией требуются 2:
#pragma mark - UICollectionViewDelegate
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath
Важно отметить, что вы можете заменить <UICollectionViewDelegateFlowLayout>
на <UICollectionViewDelegate>
и по-прежнему иметь доступ ко всем методам в <UICollectionViewDelegate>
, потому что <UICollectionViewDelegateFlowLayout>
является подклассом <UICollectionViewDelegate>
.
Ответ 2
И версия Swift
-
Перетащите UICollectionView в свой UIView и соответствующим образом настройте его.
-
Измените свой UIViewController для расширения UICollectionViewDataSource и UICollectionViewDelegate
-
Реализовать требуемые функции
-
Управление-перетаскивание из раскадровки в класс, чтобы создать выход "collectionView"
-
В viewDidLoad() подключите делегат и источник данных к себе
collectionView.delegate = self
иcollectionView.dataSource = self
Он должен выглядеть следующим образом:
class CustomerViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate
{
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad() {
collectionView.delegate = self
collectionView.dataSource = self
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
}
func collectionView(collectionView: UICollectionView, didEndDisplayingCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {
}
func collectionView(collectionView: UICollectionView, didEndDisplayingSupplementaryView view: UICollectionReusableView, forElementOfKind elementKind: String, atIndexPath indexPath: NSIndexPath) {
}
}
Ответ 3
Перетащите UICollectionView в свой UIView и соответствующим образом настройте его. Создайте свойство, которое также является IBOutlet в вашем .h файле для коллекции:
@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;
в UIView сначала вам нужно объявить ячейку UICollectionView в -(void)awakeFromNib
[myCollectionView registerNib:[UINib nibWithNibName:@"nib file of collectionView cell" bundle:nil] forCellWithReuseIdentifier:@"identifier"];
затем
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
custom class *cell1=[collectionView dequeueReusableCellWithReuseIdentifier:@"identifier" forIndexPath:indexPath];
return cell1;
}
Ответ 4
- Перетащите uiviewcontroller в таблицу.
- Создайте новый файл класса для нового uiviewcontoller
- Установите вновь созданный класс в наш диспетчер представлений. И добавьте методы протокола в файл .h. -UICollectionViewDelegate, UICollectionViewDataSource
- Перетащите uicollectionview в viewcontroller, по умолчанию появится uicollectionviewcell с представлением коллекции.
- Создайте новый класс для настройки ячейки в качестве подкласса ячейки uicollectionviewcell и установите класс в ячейку в инспекторе идентификации. Также установите идентификатор повторного использования в инспекторе атрибутов, имя, которое мы должны указать, чтобы идентифицировать uicollectionviewcell. Скажите ячейку здесь.
- Перетащите изображение (может быть как угодно) в ячейку uicollectionviewcell, размер которой будет соответствовать.
- Установить изображение с изображением (это изображение будет отображаться повторно с помощью коллекции).
- Установите делегат и источник данных с помощью uicollectionview в соответствующий диспетчер представлений.
-
Установите методы источника данных - numberOfItemsInSection и cellForItemAtIndexPath.
-
Возвращает необходимое количество клеток с помощью метода numberOfItemsInSection. Скажите 10 здесь.
-
Верните ячейку для отображения с помощью cellForItemAtIndexPath.
NSString * identifier = @"cell"; CollectionViewCellForDay * cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; return cell;
К настоящему моменту вы должны иметь визуальное представление о 10 ячейках коллекции:)