TestsTested | ✗ |
LangLanguage | Obj-CObjective C |
License | MIT |
ReleasedLast Release | Aug 2017 |
Maintained by DuYe.
DYKit是一套使用了ReactiveObjC的系统控件封装库
DYKit将UIkit中的大部分常用组件进行了封装,让这些控件不再使用delegate,datasource等而是可以通过block,RACSignal等形式进行控制,通过链式调用,很多控件从此可以通过一句代码完成。
[self.homeTableView assemblyWithAssemblyBlock:^(UITableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
//这个block充当了cellForRowAtIndexPath的作用
cell.textLabel.text = text;
}];
//设定数据
self.homeTableView.dy_data = @[@"标题1",@"标题2",@"标题3",@"标题4"];
dy_data
是一个NSArray
的属性。你只能给他绑定发送NSArray
的RACSignal
.当然你也可以像下面这样直接给他赋值。
self,homeTableView.dy_data = @[@"标题1",@"标题2",@"标题3",@"标题4"];
dy_data
中的每一个元素都会出现在上面那个assemblyWithAssemblyBlock
中的第二个参数。你可以修改参数成任意类型,比如model
或videModel
甚至是NSString
。[self.tableView assemblyByReuseIdentifier:@"OneTypeCellByNibTableViewCell" withAssemblyBlock:^(OneTypeCellByNibTableViewCell *cell, User *user, NSIndexPath *indexPath) {
cell.headImageView.image = [UIImage imageNamed:user.img];
cell.headImageView.backgroundColor = user.sex == 0 ? [UIColor purpleColor] : [UIColor blackColor];
cell.nameLabel.text = user.name;
cell.ageLabel.text = user.age;
cell.descLabel.text = user.desc;
}];
User *user1 = [User new];
User *user2 = [User new];
User *user3 = [User new];
user1.id = @"001";
user1.name = @"jack";
user1.img = @"head";
user1.age = @"29";
user1.desc = @"她喜欢黑色";
user1.sex = 0;
user2.id = @"002";
user2.name = @"Pink man";
user2.img = @"head";
user2.age = @"18";
user2.desc = @"白老师得意门生";
user2.sex = 1;
user3.id = @"003";
user3.name = @"MR.white";
user3.img = @"head";
user3.age = @"43";
user3.desc = @"平淡无奇的中学化学老师";
user3.sex = 1;
self.tableView.dy_data = @[user1,user2,user3];
reuseIdentifier
参数传入一个复用ID。用来自动注册cell和使用复用cell,可支持nib或class创建的cell。(优先寻找reuseIdentifier
命名的xib文件,找到的情况下直接注册nibcell。找不到的情况下会使用reuseIdentifier
作为类名的非nib创建cell)/**
指定section和row进行cell设定
@param identifier cell的重用ID(使用cell的类名,可以是xib或者class创建)
@param section 指定section位置
@param row 指定row位置
@param block cellForRowAtIndexPath的block
@return 返回自身,用于链式调用
*/
- (UITableView*) addReuseIdentifier:(NSString *)identifier FromSection:(int)section row:(int)row withAssemblyBlock:(AssemblyBlock)block;
/**
指定section进行cell设定。默认本section下的cell全部按照block内容进行设定
@param identifier cell的重用ID(使用cell的类名,可以是xib或者class创建)
@param section 指定section位置
@param block cellForRowAtIndexPath的block
@return 返回自身,用于链式调用
*/
- (UITableView*) addReuseIdentifier:(NSString *)identifier FromSection:(int)section withAssemblyBlock:(AssemblyBlock)block;
/**
指定row进行cell设定。默认只有一个section
@param identifier cell的重用ID(使用cell的类名,可以是xib或者class创建)
@param row 指定row位置
@param block cellForRowAtIndexPath的block
@return 返回自身,用于链式调用
*/
- (UITableView*) addReuseIdentifier:(NSString *)identifier FromRow:(int)row withAssemblyBlock:(AssemblyBlock)block;
/**
指定具体的indexPath进行cell设定,可选择任意位置
@param identifier cell的重用ID(使用cell的类名,可以是xib或者class创建)
@param slotBlock 用于指定具体条件的block。通过对参数的indexPath进行判断,返回需要的具体位置
@param cellBindBlock cellForRowAtIndexPath的block
@return 返回自身,用于链式调用
*/
- (UITableView*) addReuseIdentifier:(NSString *)identifier FromSlot:(SlotBlock)slotBlock withAssemblyBlock:(AssemblyBlock)cellBindBlock;
你可以用这些方法获得你需要的代理事件的Signal
#pragma delegate方法
- (RACSignal*)accessoryButtonTappedForRowWithIndexPathSignal;
- (RACSignal*)didEndDisplayingCellSignal;
- (RACSignal*)didEndDisplayingHeaderViewSignal;
- (RACSignal*)didEndDisplayingFooterViewSignal;
- (RACSignal*)didHighlightRowAtIndexPathSignal;
- (RACSignal*)didUnhighlightRowAtIndexPathSignal;
- (RACSignal*)didSelectRowAtIndexPathSignal;
- (RACSignal*)didDeselectRowAtIndexPathSignal;
- (RACSignal*)didEndEditingRowAtIndexPathSignal;
- (RACSignal*)didUpdateFocusInContextSignal;
- (RACSignal*)performActionSignal;
- (RACSignal*)willBeginEditingRowAtIndexPathSignal;
- (RACSignal*)willDisplayCellSignal;
- (RACSignal*)willDisplayHeaderViewSignal;
- (RACSignal*)willDisplayFooterViewSignal;
#pragma DataSource方法
- (RACSignal*)commitEditingStyleSignal;
- (RACSignal*)moveRowAtIndexPathSignal;
你也可以通过传入block的方法来设置tableView的属性。名字和原来的那些一样
#pragma 配置用block
- (UITableView*)setHeightForRowAtIndexPath:(CGFloatTableViewIndexPath)block;
- (UITableView*)setEditActionsForRowAtIndexPath:(EditActionsForRowAtIndexPath)block;
- (UITableView*)setShouldHighlightRowAtIndexPath:(BOOLTableViewIndexPath)block;
- (UITableView*)setCanEditRowAtIndexPath:(BOOLTableViewIndexPath)block;
- (UITableView*)setNumberOfRowsInSection:(NSIntegerTableViewIndexPath)block;
//- (void)setCellForRowAtIndexPath:(UITableViewCellTableViewIndexPath)block;
- (UITableView*)setNumberOfSectionsInTableView:(NSIntegerUITableView)block;
- (UITableView*)setTitleForHeaderInSection:(NSStringTableViewNSInteger)block;
- (UITableView*)setTitleForFooterInSection:(NSStringTableViewNSInteger)block;
- (UITableView*)setCanMoveRowAtIndexPath:(BOOLTableViewIndexPath)block;
- (UITableView*)setSectionIndexTitlesForTableView:(SectionIndexTitlesForTableView)block;
- (UITableView*)setSectionForSectionIndexTitle:(NSIntegerUITableViewNSStringNSInteger)block;
- (UITableView*)setHeightForHeaderInSection:(CGFloatTableViewNSInteger)block;
- (UITableView*)setHeightForFooterInSection:(CGFloatTableViewNSInteger)block;
- (UITableView*)setEstimatedHeightForRowAtIndexPath:(CGFloatTableViewIndexPath)block;
- (UITableView*)setEstimatedHeightForHeaderInSection:(CGFloatTableViewNSInteger)block;
- (UITableView*)setEstimatedHeightForFooterInSection:(CGFloatTableViewNSInteger)block;
- (UITableView*)setViewForHeaderInSection:(UIViewTableViewNSInteger)block;
- (UITableView*)setViewForFooterInSection:(UIViewTableViewNSInteger)block;
- (UITableView*)setWillSelectRowAtIndexPath:(NSIndexPathUITableViewNSIndexPath)block;
- (UITableView*)setWillDeselectRowAtIndexPath:(NSIndexPathUITableViewNSIndexPath)block;
- (UITableView*)setEditingStyleForRowAtIndexPath:(UITableViewCellEditingStyleUITableViewNSIndexPath)block;
- (UITableView*)setTitleForDeleteConfirmationButtonForRowAtIndexPath:(NSStringTableViewIndexPath)block;
- (UITableView*)setShouldIndentWhileEditingRowAtIndexPath:(BOOLTableViewIndexPath)block;
- (UITableView*)setTargetIndexPathForMoveFromRowAtIndexPath:(NSIndexPathUITableViewNSIndexPathNSIndexPath)block;
- (UITableView*)setIndentationLevelForRowAtIndexPath:(NSIntegerUITableViewNSIndexPath)block;
- (UITableView*)setShouldShowMenuForRowAtIndexPath:(BOOLTableViewIndexPath)block;
- (UITableView*)setCanPerformAction:(BOOLUITableViewSELNSIndexPath)block;
- (UITableView*)setCanFocusRowAtIndexPath:(BOOLTableViewIndexPath)block;
- (UITableView*)setShouldUpdateFocusInContext:(BOOLUITableViewFocusUpdateContext)block;
- (UITableView*)setIndexPathForPreferredFocusedViewInTableView:(NSIndexPathUITableView)block;
该项目最低支持 iOS 8.0
。
DYKit 使用 MIT 许可证,详情见 LICENSE 文件。