1.gif使用方法
CocoaPods pod 'RATreeView', '~> 2.1.0'
具體使用1.創(chuàng)建model
#import <Foundation/Foundation.h>@interface RaTreeModel : NSObject@PRoperty (nonatomic,copy) NSString *name;//標(biāo)題@property (nonatomic,strong) NSArray *children;//子節(jié)點(diǎn)數(shù)組//初始化一個model- (id)initWithName:(NSString *)name children:(NSArray *)array;//遍歷構(gòu)造器+ (id)dataObjectWithName:(NSString *)name children:(NSArray *)children;@end#import "RaTreeModel.h"@implementation RaTreeModel- (id)initWithName:(NSString *)name children:(NSArray *)children{ self = [super init]; if (self) { self.children = children; self.name = name; } return self;}+ (id)dataObjectWithName:(NSString *)name children:(NSArray *)children{ return [[self alloc] initWithName:name children:children];}@end2.創(chuàng)建cell
特別注意 xib創(chuàng)建的cell, 一定不要勾選Use Auto Layout,否則cell上的布局不會執(zhí)行.找不到的,請看下圖
Snip20160525_1.pngcell創(chuàng)建具體如下:
這是我用xib設(shè)置的cell,你們按照你們的需求做
Snip20160525_4.png#import <UIKit/UIKit.h>@interface RaTreeViewCell : UITableViewCell@property (weak, nonatomic) IBOutlet UIImageView *iconView;//圖標(biāo)@property (weak, nonatomic) IBOutlet UILabel *titleLable;//標(biāo)題//賦值- (void)setCellBasicInfoWith:(NSString *)title level:(NSInteger)level children:(NSInteger )children;@end#import "RaTreeViewCell.h"@interface RaTreeViewCell ()@end@implementation RaTreeViewCell- (void)awakeFromNib { // Initialization code self.selectionStyle = UITableViewCellSelectionStyleNone;}- (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; // Configure the view for the selected state}- (void)setCellBasicInfoWith:(NSString *)title level:(NSInteger)level children:(NSInteger )children{ //有自孩子時顯示圖標(biāo) if (children==0) { self.iconView.hidden = YES; } else { //否則不顯示 self.iconView.hidden = NO; } self.titleLable.text = title; self.iconView.image = [UIImage imageNamed:@"close"]; //每一層的布局 CGFloat left = 10+level*30; //頭像的位置 CGRect iconViewFrame = self.iconView.frame; iconViewFrame.origin.x = left; self.iconView.frame = iconViewFrame; //title的位置 CGRect titleFrame = self.titleLable.frame; titleFrame.origin.x = 40+left; self.titleLable.frame = titleFrame;}3.創(chuàng)建RATreeView只展示核心代碼
數(shù)據(jù)
//加載數(shù)據(jù)- (void)setData { //寶雞市 (四層) RaTreeModel *zijingcun = [RaTreeModel dataObjectWithName:@"紫荊村" children:nil]; RaTreeModel *chengcunzheng = [RaTreeModel dataObjectWithName:@"陳村鎮(zhèn)" children:@[zijingcun]]; RaTreeModel *fengxiang = [RaTreeModel dataObjectWithName:@"鳳翔縣" children:@[chengcunzheng]]; RaTreeModel *qishan = [RaTreeModel dataObjectWithName:@"岐山縣" children:nil]; RaTreeModel *baoji = [RaTreeModel dataObjectWithName:@"寶雞市" children:@[fengxiang,qishan]]; //西安市 RaTreeModel *yantaqu = [RaTreeModel dataObjectWithName:@"雁塔區(qū)" children:nil]; RaTreeModel *xinchengqu = [RaTreeModel dataObjectWithName:@"新城區(qū)" children:nil]; RaTreeModel *xian = [RaTreeModel dataObjectWithName:@"西安" children:@[yantaqu,xinchengqu]]; RaTreeModel *shanxi = [RaTreeModel dataObjectWithName:@"陜西" children:@[baoji,xian]]; [self.modelArray addObject:shanxi];}#代理方法
#pragma mark -----------delegate //返回行高- (CGFloat)treeView:(RATreeView *)treeView heightForRowForItem:(id)item { return 50;}//將要展開- (void)treeView:(RATreeView *)treeView willExpandRowForItem:(id)item { RaTreeViewCell *cell = (RaTreeViewCell *)[treeView cellForItem:item]; cell.iconView.image = [UIImage imageNamed:@"open"];}//將要收縮- (void)treeView:(RATreeView *)treeView willCollapseRowForItem:(id)item { RaTreeViewCell *cell = (RaTreeViewCell *)[treeView cellForItem:item]; cell.iconView.image = [UIImage imageNamed:@"close"];}//已經(jīng)展開- (void)treeView:(RATreeView *)treeView didExpandRowForItem:(id)item { NSLog(@"已經(jīng)展開了");}//已經(jīng)收縮- (void)treeView:(RATreeView *)treeView didCollapseRowForItem:(id)item { NSLog(@"已經(jīng)收縮了");}# dataSource方法
//返回cell- (UITableViewCell *)treeView:(RATreeView *)treeView cellForItem:(id)item { //獲取cell RaTreeViewCell *cell = [treeView dequeueReusableCellWithIdentifier:@"RaTreeViewCell"]; //當(dāng)前item RaTreeModel *model = item; //當(dāng)前層級 NSInteger level = [treeView levelForCellForItem:item]; //賦值 [cell setCellBasicInfoWith:model.name level:level children:model.children.count]; return cell;}/** * 必須實(shí)現(xiàn) * * @param treeView treeView * @param item 節(jié)點(diǎn)對應(yīng)的item * * @return 每一節(jié)點(diǎn)對應(yīng)的個數(shù) */- (NSInteger)treeView:(RATreeView *)treeView numberOfChildrenOfItem:(id)item{ RaTreeModel *model = item; if (item == nil) { return self.modelArray.count; } return model.children.count;}/** *必須實(shí)現(xiàn)的dataSource方法 * * @param treeView treeView * @param index 子節(jié)點(diǎn)的索引 * @param item 子節(jié)點(diǎn)索引對應(yīng)的item * * @return 返回 節(jié)點(diǎn)對應(yīng)的item */- (id)treeView:(RATreeView *)treeView child:(NSInteger)index ofItem:(id)item { RaTreeModel *model = item; if (item==nil) { return self.modelArray[index]; } return model.children[index];}//cell的點(diǎn)擊方法- (void)treeView:(RATreeView *)treeView didSelectRowForItem:(id)item { //獲取當(dāng)前的層 NSInteger level = [treeView levelForCellForItem:item]; //當(dāng)前點(diǎn)擊的model RaTreeModel *model = item; NSLog(@"點(diǎn)擊的是第%ld層,name=%@",level,model.name);}//單元格是否可以編輯 默認(rèn)是YES- (BOOL)treeView:(RATreeView *)treeView canEditRowForItem:(id)item { return YES;}//編輯要實(shí)現(xiàn)的方法- (void)treeView:(RATreeView *)treeView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowForItem:(id)item { NSLog(@"編輯了實(shí)現(xiàn)的方法");}4.基本能用到的方法 我都寫了注釋,如有錯誤請指出.是不是比官方的清楚的多.
新聞熱點(diǎn)
疑難解答
圖片精選