#if USE_UIKIT_PUBLIC_HEADERS || !__has_include(<UIKitCore/UICollectionViewCell.h>)
//
// UICollectionViewCell.h
// UIKit
//
// Copyright (c) 2011-2018 Apple Inc. All rights reserved.
//
#import <UIKit/UIView.h>
#import <UIKit/UIKitDefines.h>
#import <UIKit/UICollectionView.h>
NS_ASSUME_NONNULL_BEGIN
@class UICollectionViewLayout;
@class UICollectionView;
@class UICollectionViewLayoutAttributes;
@class UILongPressGestureRecognizer;
/* Cell拖动状态 <枚举> */
typedef NS_ENUM(NSInteger, UICollectionViewCellDragState) {
UICollectionViewCellDragStateNone, /// Cell没有被拖动
UICollectionViewCellDragStateLifting, /// Cell正在拖动
UICollectionViewCellDragStateDragging /// Cell已经开始被拖动(处于“拖动”状态的单元格留下“幻影”外观以表示拖动从哪里开始)
} API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos, watchos);
#pragma mark - 可复用的集合视图 Class
#pragma mark -
/*
- UICollectionViewCell的父类
*/
NS_CLASS_AVAILABLE_IOS(6_0) @interface UICollectionReusableView : UIView
/// 获取 重用标识符
@property (nonatomic, readonly, copy, nullable) NSString *reuseIdentifier;
// 准备重复使用(复用Cell之前会调用此方法,一般用来重置默认数据,不要设置新数据;需要调回父类)
- (void)prepareForReuse;
/**
自定义布局属性应用于视图
@param layoutAttributes 要应用的布局属性
- 在视图添加到集合视图之后且重用队列返回视图之前调用
- 只在属性更改时调用,由-isEqual:定义
- 如果布局对象支持自定义布局属性,则可以使用此方法将这些属性应用于视图. 在这种情况下,layoutAttributes参数应包含UICollectionViewLayoutAttributes的子类的实例,您不需要重写此方法以支持UICollectionViewLayoutAttributes类的标准布局属性,集合视图自动应用这些属性
*/
- (void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes;
/* 重写这些方法为特定布局提供自定义UI */
// 告诉View集合视图的布局对象即将更改(此方法的默认实现不执行任何操作,子类可以重写此方法不回调父类,并使用它来准备布局的更改)
- (void)willTransitionFromLayout:(UICollectionViewLayout *)oldLayout toLayout:(UICollectionViewLayout *)newLayout;
// 告诉View集合视图的布局对象已经更改
- (void)didTransitionFromLayout:(UICollectionViewLayout *)oldLayout toLayout:(UICollectionViewLayout *)newLayout;
/**
使单元格有机会修改布局对象提供的属性
@param layoutAttributes 布局对象提供的属性(这些属性表示布局要应用于单元格的值)
@return 应用于单元格的最终属性
- 此方法的默认实现调整大小值以适应自调整单元格所做的更改;
- 子类可以覆盖此方法并使用它来调整其他布局属性(如果您覆盖此方法并希望调整单元格大小,请先调用super并对返回的属性进行自定义修改)
*/
- (UICollectionViewLayoutAttributes *)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes NS_AVAILABLE_IOS(8_0);
@end
#pragma mark - UICollectionViewCell Class
#pragma mark -
/*
- 布局子视图需要添加到 ContentView 上
- 除 ContentView 外,Cell还管理两个背景视图,以显示处于选定/未选定状态的Cell
- 不用单独实例化Cell,使用集合视图注册(或用 Xib 注册);如果注册后需要新的Cell可以调用集合视图的 dequeueReusableCellWithReuseIdentifier:forIndexPath: 方法从缓存池中取出
*/
NS_CLASS_AVAILABLE_IOS(6_0) @interface UICollectionViewCell : UICollectionReusableView
/// 内容视图(用于承载子视图)
@property (nonatomic, readonly) UIView *contentView;
/// 设置 Cell是否选中
@property (nonatomic, getter=isSelected) BOOL selected;
/// 设置 Cell是否高亮
@property (nonatomic, getter=isHighlighted) BOOL highlighted;
/**
Cell已经开始拖动
@param API_UNAVAILABLE 拖动状态
- 修改此方法可以改变拖动时的特效
- 可选择性回调父类
*/
- (void)dragStateDidChange:(UICollectionViewCellDragState)dragState API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos, watchos);
// 设置 背景视图(视图层级在所有视图的最下层)
@property (nonatomic, strong, nullable) UIView *backgroundView;
// 设置 选中背景视图(如果与backgroundView不同,它将被放置在背景视图上方并在选择中进行动画处理)
@property (nonatomic, strong, nullable) UIView *selectedBackgroundView;
@end
NS_ASSUME_NONNULL_END
#else
#import <UIKitCore/UICollectionViewCell.h>
#endif
UICollectionViewCell.h
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 解决UICollectionView间隔设置为0时仍有空隙的问题 明明把间距设置为0了为什么还有空隙呢 ?接着往下...
- 项目中遇到一个问题记录一下我的解决方案 如果有好的方案欢迎留言告知必定重谢 状态错乱是cell的重用导致的 // ...
- 首页有一块UI设计的是几个色块,不想用xib在UICollectionViewcell上绘制成死的四个区块,想用U...