iOS开-UIKit( UITableView.h - -解读)


//  UITableView.h


#import <Foundation/Foundation.h>

#import <CoreGraphics/CoreGraphics.h>

#import <UIKit/UIScrollView.h>

#import <UIKit/UISwipeGestureRecognizer.h>

#import <UIKit/UITableViewCell.h>

#import <UIKit/UIKitDefines.h>


NS_ASSUME_NONNULL_BEGIN


typedef NS_ENUM(NSInteger, UITableViewStyle) {

    UITableViewStylePlain,       // regular table view

    UITableViewStyleGrouped     // preferences style table view

};


typedef NS_ENUM(NSInteger, UITableViewScrollPosition) {

    UITableViewScrollPositionNone,

    UITableViewScrollPositionTop,    

    UITableViewScrollPositionMiddle,   

    UITableViewScrollPositionBottom

};                // scroll so row of interest is completely visible at top/center/bottom of view


typedef NS_ENUM(NSInteger, UITableViewRowAnimation) {

    UITableViewRowAnimationFade,

    UITableViewRowAnimationRight,           // slide in from right (or out to right)

    UITableViewRowAnimationLeft,

    UITableViewRowAnimationTop,

    UITableViewRowAnimationBottom,

    UITableViewRowAnimationNone,            // available in iOS 3.0

    UITableViewRowAnimationMiddle,          // available in iOS 3.2.  attempts to keep cell centered in the space it will/did occupy

    UITableViewRowAnimationAutomatic = 100 // available in iOS 5.0.  chooses an appropriate animation style for you

};


// Including this constant string in the array of strings returned by sectionIndexTitlesForTableView: will cause a magnifying glass icon to be displayed at that location in the index.

// This should generally only be used as the first title in the index.

UIKIT_EXTERN NSString *const UITableViewIndexSearchNS_AVAILABLE_IOS(3_0);


// Returning this value from tableView:heightForHeaderInSection: or tableView:heightForFooterInSection: results in a height that fits the value returned from

// tableView:titleForHeaderInSection: or tableView:titleForFooterInSection: if the title is not nil.

UIKIT_EXTERN constCGFloat UITableViewAutomaticDimension NS_AVAILABLE_IOS(5_0);


@class UITableView;

@class UINib;

@protocol UITableViewDataSource;

@class UILongPressGestureRecognizer;

@class UITableViewHeaderFooterView;

@class UIRefreshControl;

@class UIVisualEffect;


typedef NS_ENUM(NSInteger, UITableViewRowActionStyle) {

    UITableViewRowActionStyleDefault = 0,

    UITableViewRowActionStyleDestructive = UITableViewRowActionStyleDefault,

    UITableViewRowActionStyleNormal

} NS_ENUM_AVAILABLE_IOS(8_0);


NS_CLASS_AVAILABLE_IOS(8_0)@interface UITableViewRowAction : NSObject <NSCopying>


+ (instancetype)rowActionWithStyle:(UITableViewRowActionStyle)style title:(nullableNSString *)title handler:(void (^)(UITableViewRowAction *action,NSIndexPath *indexPath))handler;


@property (nonatomic,readonly) UITableViewRowActionStyle style;

@property (nonatomic,copy, nullable)NSString *title;

@property (nonatomic,copy, nullable) UIColor *backgroundColor;// default background color is dependent on style

@property (nonatomic,copy, nullable)UIVisualEffect* backgroundEffect;


@end



//**************************************************************

//这个协议描述了cell的显示和行为

@protocol UITableViewDelegate<NSObject,UIScrollViewDelegate>


@optional



//即将显示indexPath处的cell时触发

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;

//即将显示section处的Header时触发

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)sectionNS_AVAILABLE_IOS(6_0);

//即将显示section处的Footer时触发

- (void)tableView:(UITableView *)tableView willDisplayFooterView:(UIView *)view forSection:(NSInteger)sectionNS_AVAILABLE_IOS(6_0);

//结束显示indexPath处的cell时触发

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPathNS_AVAILABLE_IOS(6_0);

//结束显示section处的Header时触发

- (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(UIView *)view forSection:(NSInteger)sectionNS_AVAILABLE_IOS(6_0);

//结束显示section处的Footer时触发

- (void)tableView:(UITableView *)tableView didEndDisplayingFooterView:(UIView *)view forSection:(NSInteger)sectionNS_AVAILABLE_IOS(6_0);

//该方法返回值决定指定indexPath对应的row的高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

//该方法返回值决定指定isection对应的Header的高度

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;

//该方法返回值决定指定section对应的Footer的高度

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;

//设置一个行高的估计值(默认为0,表示没有估计,7.0之后可用)

注意:这个属性官方的解释是如果你的tableView的行高是可变的,那么设计一个估计高度可以加快代码的运行效率。 

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPathNS_AVAILABLE_IOS(7_0);

//下面这两个属性和上面相似,分别设置分区头视图和尾视图的估计高度(7.0之后可用)

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)sectionNS_AVAILABLE_IOS(7_0);

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)sectionNS_AVAILABLE_IOS(7_0);

//该方法返回值决定指定isection对应的Header视图

- (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;  

//该方法返回值决定指定section对应的Footer视图

- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;   

//已弃用

- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPathNS_DEPRECATED_IOS(2_0,3_0);

//accessoryButton的点击事件

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;


// Cell高亮的回调,一般式在选择的时候才高亮

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPathNS_AVAILABLE_IOS(6_0);

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPathNS_AVAILABLE_IOS(6_0);

- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPathNS_AVAILABLE_IOS(6_0);


// Cell选中和取消选择的回调

- (nullable NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath;

- (nullable NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPathNS_AVAILABLE_IOS(3_0);

// Called after the user changes the selection.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPathNS_AVAILABLE_IOS(3_0);


//该方法返回值决定了 indexPath处的cell的编辑状态  返回值为枚举类型 分别为 None Delete Insert

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

//删除按钮上的文字

- (nullable NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0);

//返回一个UITableViewRowAction数组,每一个"Action"代表一个侧滑删除的Button。这样侧滑每一行Cell可以有更多按钮提供给用户交互。

- (nullable NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0); 


//该方法决定了 cell处于被编辑状态时是否应该缩进 若未重写 所有cell处于编辑状态时都会缩进

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath;


// The willBegin/didEnd methods are called whenever the 'editing' property is automatically changed by the table (allowing insert/delete/move). This is done by a swipe activating a single row

- (void)tableView:(UITableView*)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath;

- (void)tableView:(UITableView*)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath;


// Moving/reordering


// Allows customization of the target row for a particular row as it is being moved/reordered

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath;               


// Indentation


- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath;// return 'depth' of row for hierarchies


// Copy/Paste.  All three methods must be implemented by the delegate.


- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPathNS_AVAILABLE_IOS(5_0);

- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(nullableid)sender NS_AVAILABLE_IOS(5_0);

- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(nullableid)sender NS_AVAILABLE_IOS(5_0);


@end


UIKIT_EXTERN NSString *const UITableViewSelectionDidChangeNotification;



//**************************************************************

//UITableView继承于UIScrollView

NS_CLASS_AVAILABLE_IOS(2_0)@interface UITableView : UIScrollView <NSCoding>

//UITableView创建,创建的时候必须指明style(默认UITableViewStylePlain

- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)styleNS_DESIGNATED_INITIALIZER


- (nullable instancetype)initWithCoder:(NSCoder *)aDecoderNS_DESIGNATED_INITIALIZER;

//UITableView风格(只读)

@property (nonatomic,readonly) UITableViewStyle style;

//UITableView数据源

@property (nonatomic,weak, nullable)id <UITableViewDataSource> dataSource;

//UITableView代理

@property (nonatomic,weak, nullable)id <UITableViewDelegate> delegate;

//设置表视图cell的高度,统一的高度默认44px

@property (nonatomic)CGFloat rowHeight;

//设置UITableViewsection的头部的高度             

@property (nonatomic)CGFloat sectionHeaderHeight;   

//设置UITableViewsection的尾部的高度

@property (nonatomic)CGFloat sectionFooterHeight; 

//设置一个行高的估计值(默认为0,表示没有估计,7.0之后可用)

注意:这个属性官方的解释是如果你的tableView的行高是可变的,那么设计一个估计高度可以加快代码的运行效率。 

@property (nonatomic)CGFloat estimatedRowHeight NS_AVAILABLE_IOS(7_0); 

//下面这两个属性和上面相似,分别设置分区头视图和尾视图的估计高度(7.0之后可用)

@property (nonatomic)CGFloat estimatedSectionHeaderHeight NS_AVAILABLE_IOS(7_0); 

@property (nonatomic)CGFloat estimatedSectionFooterHeight NS_AVAILABLE_IOS(7_0); 

//设置分割线的位置

@property (nonatomic)UIEdgeInsets separatorInsetNS_AVAILABLE_IOS(7_0)UI_APPEARANCE_SELECTOR

//设置UITableView的背景

@property (nonatomic,strong, nullable)UIView *backgroundViewNS_AVAILABLE_IOS(3_2); 


//刷新整个tableView

- (void)reloadData; 

//重载索引栏

- (void)reloadSectionIndexTitles NS_AVAILABLE_IOS(3_0);   // reloads the index bar.


@property (nonatomic,readonly) NSInteger numberOfSections;

//每个分区section有多少行

- (NSInteger)numberOfRowsInSection:(NSInteger)section;

//获取分区的大小(包括头视图,所有行和尾视图)

- (CGRect)rectForSection:(NSInteger)section;

//根据分区分别获取头视图,尾视图和行的高度                                    

- (CGRect)rectForHeaderInSection:(NSInteger)section;

- (CGRect)rectForFooterInSection:(NSInteger)section;

- (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath;

//获取某个点在tableView中的位置信息

- (nullable NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point;

//获取某个celltableView中的位置信息                         

- (nullable NSIndexPath *)indexPathForCell:(UITableViewCell *)cell; 

//根据一个矩形范围返回一个信息数组,数组中是每一行row的位置信息                     

- (nullable NSArray<NSIndexPath *> *)indexPathsForRowsInRect:(CGRect)rect;                              

//通过位置路径获取cell

- (nullable __kindofUITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath; 

//获取所有可见的cell  

@property (nonatomic,readonly) NSArray<__kindofUITableViewCell *> *visibleCells;

//获取所有可见行的位置信息

@property (nonatomic,readonly, nullable)NSArray<NSIndexPath *> *indexPathsForVisibleRows;

//根据分区获取头视图

- (nullable UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)sectionNS_AVAILABLE_IOS(6_0);

//根据分区获取尾视图

- (nullable UITableViewHeaderFooterView *)footerViewForSection:(NSInteger)sectionNS_AVAILABLE_IOS(6_0);

//使表视图定位到某一位置()

// 注意:indexPah参数是定位的位置,决定于分区和行号。animated参数决定是否有动画。scrollPosition参数决定定位的相对位置,它使一个枚举

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;

//使表视图定位到选中行

- (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;


// Row insertion/deletion/reloading.

//开始块标志

- (void)beginUpdates;

//结束快标志   

- (void)endUpdates;     

//指定的indexSet所包含的一个或多个分区号对应的位置插入分区

- (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;

//删除指定indexSet所包含的一个或多个分区号所对应的分区

- (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;

- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animationNS_AVAILABLE_IOS(3_0);

//将指定分区移动到另一个位置

- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSectionNS_AVAILABLE_IOS(5_0);

//插入一些行,animation参数是一个枚举

- (void)insertRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

//删除一些行,animation参数是一个枚举

- (void)deleteRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

//重载一些行,animation参数是一个枚举

- (void)reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animationNS_AVAILABLE_IOS(3_0);

//移动某行

- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPathNS_AVAILABLE_IOS(5_0);

/*

 当我们调用的上面的函数时,tableView会立刻调用代理方法进行刷新,如果其中我们所做的操作是删除某行,而然数据源数组我们可能并没有刷新,程序就会崩溃掉,原因是代理返回的信息和我们删除后不符

 */


//设置是否是编辑状态(编辑状态下的cell左边会出现一个减号,点击右边会划出删除按钮)

@property (nonatomic,getter=isEditing) BOOL editing;                             

- (void)setEditing:(BOOL)editing animated:(BOOL)animated;

//设置cell是否可以被选中(默认为YES)

@property (nonatomic)BOOL allowsSelection NS_AVAILABLE_IOS(3_0); 

//设置cell编辑模式下是否可以被选中 

@property (nonatomic)BOOL allowsSelectionDuringEditing;

//设置是否支持多选                                 

@property (nonatomic)BOOL allowsMultipleSelection NS_AVAILABLE_IOS(5_0);

//设置cell编辑模式下是否支持多选                 

@property (nonatomic)BOOL allowsMultipleSelectionDuringEditing NS_AVAILABLE_IOS(5_0);   

//获取选中cell的位置信息

@property (nonatomic,readonly, nullable)NSIndexPath *indexPathForSelectedRow; 

//获取多选cell的位置信息

@property (nonatomic,readonly, nullable)NSArray<NSIndexPath *> *indexPathsForSelectedRowsNS_AVAILABLE_IOS(5_0); 


//代码手动选中与取消选中某行

- (void)selectRowAtIndexPath:(nullableNSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;

- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;


//tableView附件的相关方法

//设置索引栏最小显示行数

@property (nonatomic)NSInteger sectionIndexMinimumDisplayRowCount;    

 //设置索引栏字体颜色                                                 

@property (nonatomic,strong, nullable) UIColor *sectionIndexColorNS_AVAILABLE_IOS(6_0)UI_APPEARANCE_SELECTOR;

//设置索引栏背景颜色                   

@property (nonatomic,strong, nullable)UIColor *sectionIndexBackgroundColor NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;

//设置索引栏被选中时的颜色         

@property (nonatomic,strong, nullable)UIColor *sectionIndexTrackingBackgroundColor NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR

//设置分割线的风格,这个风格是一个枚举

@property (nonatomic)UITableViewCellSeparatorStyle separatorStyle; 

//设置分割线颜色

@property (nonatomic,strong, nullable)UIColor *separatorColorUI_APPEARANCE_SELECTOR;

//设置分割线毛玻璃效果(IOS8之后可用) 

@property (nonatomic,copy, nullable) UIVisualEffect *separatorEffectNS_AVAILABLE_IOS(8_0)UI_APPEARANCE_SELECTOR

@property (nonatomic)BOOL cellLayoutMarginsFollowReadableWidth NS_AVAILABLE_IOS(9_0); 

//设置tableView头视图

@property (nonatomic,strong, nullable)UIView *tableHeaderView;                           

//设置tableView尾视图

@property (nonatomic,strong, nullable)UIView *tableFooterView;                           

//从复用池中取cell

- (nullable __kindofUITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;  

//获取一个已注册的cell

- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPathNS_AVAILABLE_IOS(6_0); 

//从复用池获取头视图或尾视图

- (nullable __kindofUITableViewHeaderFooterView *)dequeueReusableHeaderFooterViewWithIdentifier:(NSString *)identifierNS_AVAILABLE_IOS(6_0); 

//通过xib文件注册cell

- (void)registerNib:(nullableUINib *)nib forCellReuseIdentifier:(NSString *)identifierNS_AVAILABLE_IOS(5_0);

//通过OC类注册cell

- (void)registerClass:(nullable Class)cellClass forCellReuseIdentifier:(NSString *)identifierNS_AVAILABLE_IOS(6_0);

//通过xib文件和OC类获取注册头视图和尾视图

- (void)registerNib:(nullableUINib *)nib forHeaderFooterViewReuseIdentifier:(NSString *)identifierNS_AVAILABLE_IOS(6_0);

- (void)registerClass:(nullable Class)aClass forHeaderFooterViewReuseIdentifier:(NSString *)identifierNS_AVAILABLE_IOS(6_0);

@end




//**************************************************************

//这个协议描绘数据模型

@protocol UITableViewDataSource<NSObject>


//必须实现的方法

@required

//每个组(section)有多少行(row

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

//每行的显示,通常通过设置reuseIdentifier进行cell的重复利用

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;


//选择实现的方法

@optional

//有多少组(section),默认1

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

//设置每组的头标题  

- (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;   

//设置每组的尾标题

- (nullable NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;

//该方法返回值决定指定indexPath对应的cell是否可以编辑

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;

//该方法返回值决定指定indexPath对应的cell是否可以移动

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;

//右边一竖列索引显示的内容eg‘a’‘z’

- (nullable NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView;

//把每一组和右边的索引关联起来(eg‘a’对应第一组),告诉tableview哪个section符合右边的某个索引标题

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index; // tell table which section corresponds to section title/index (e.g. "B",1))

//当用户对指定表格行编辑(包括插入和删除)时触发该方法

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

//该方法触发移动  通常对数据进行处理

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;


@end



//**************************************************************

//NSIndexPath类别,提供更方便的办法,用NSIndexPath去描绘sectionrow

@interface NSIndexPath (UITableView)


+ (instancetype)indexPathForRow:(NSInteger)row inSection:(NSInteger)section;


@property (nonatomic,readonly) NSInteger section;

@property (nonatomic,readonly) NSInteger row;


@end


NS_ASSUME_NONNULL_END


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值