首页 热点专区 小学知识 中学知识 出国留学 考研考公
您的当前位置:首页正文

UICollectionViewCell

2024-12-07 来源:要发发知识网

#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

显示全文