登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

查看: 129|回复: 6

iOS中 自定义cell升级版 (高级),自定义cell

[复制链接]

303

主题

531

帖子

2384

金钱

手工艺人

发表于 2018-1-11 11:46:27 | 显示全部楼层 |阅读模式

        

        

        指定根视图:

        

[Java] 查看源文件 复制代码
    self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[RootTableViewController alloc] initWithStyle:UITableViewStylePlain]];

        

        RootTableViewController.m

        

[Java] 查看源文件 复制代码
#import WGModel.h
#import WGCell.h

#interface RootTableViewController ()

#property (nonatomic, strong) NSMutableDictionary *dataDict;

#end

#implementation RootTableViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.dataDict = [NSMutableDictionary dictionary];
    
    [self.tableView registerClass:[WGCell class] forCellReuseIdentifier:#cell];
    [self loadDataAndShow];
}


请求数据:

        

        

[Java] 查看源文件 复制代码
- (void)loadDataAndShow
{
    NSURL *url = [NSURL URLWithString:#https://api.breadtrip.com/trips/2387133727/schedule/];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
       
        if (data != nil) {
            NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
            for (NSDictionary *dict in array) {
                NSString *key = dict[#date];
                NSArray *placesArray = dict[#places];
                NSMutableArray *mutableArray = [NSMutableArray array];
                for (NSDictionary *placesDict in placesArray) {
                    WGModel *model = [[WGModel alloc] init];
                    [model setValuesForKeysWithDictionary:placesDict];
                    model.isShow = NO;
                    [mutableArray addObject:model];
                }
                [self.dataDict setObject:mutableArray forKey:key];
            }
            [self.tableView reloadData];
        }
        
        
    }];
}

        

        #pragma mark - Table view data source

        

[Java] 查看源文件 复制代码
- (NSInteger)numberOfSectionsInTableView: (UITableView *)tableView
{
    return self.dataDict.allKeys.count;
}

- (NSInteger)tableView: (UITableView *)tableView numberOfRowsInSection: (NSInteger)section
{
    NSString *key = self.dataDict.allKeys[section];
    return [self.dataDict[key] count];
}


- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
    WGCell *cell = [tableView dequeueReusableCellWithIdentifier:#cell forIndexPath:indexPath];
    
    NSString *key = self.dataDict.allKeys[indexPath.section];
    NSMutableArray *mutableArray = self.dataDict[key];
    WGModel *model = mutableArray[indexPath.row];
    [cell configureCellWithModel:model];
    
    if (model.isShow == YES) {
        [cell showTableView];
    } else {
        
        [cell hiddenTableView];
    }
    
    return cell;
}


自适应高

        

        

[Java] 查看源文件 复制代码
- (CGFloat)tableView: (UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *)indexPath
{
    NSString *key = self.dataDict.allKeys[indexPath.section];
    NSMutableArray *mutableArray = self.dataDict[key];
    WGModel *model = mutableArray[indexPath.row];
    if (model.isShow) {
        return (model.pois.count + 1) * 44;
    } else {
        return 44;
    }
}


点击cell会走的方法

        

        

[Java] 查看源文件 复制代码
- (void)tableView: (UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath
{
    NSString *key = self.dataDict.allKeys[indexPath.section];
    NSMutableArray *mutableArray = self.dataDict[key];
    WGModel *model = mutableArray[indexPath.row];
    model.isShow = !model.isShow;
    [self.tableView reloadRowsAtIndexPaths:#[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}


自定义cell

        

        

[Java] 查看源文件 复制代码
//.h
#import 
#class WGModel;
#interface WGCell : UITableViewCell

#property (nonatomic, strong) UILabel *aLabel;
#property (nonatomic, strong) UITableView *tableView;


- (void)configureCellWithModel: (WGModel *)model;

- (void)showTableView;
- (void)hiddenTableView;

#end

//.m
#import WGCell.h
#import WGModel.h

#interface WGCell ()

#property (nonatomic, strong) NSMutableArray *dataArray;

#end

#implementation WGCell


- (instancetype)initWithStyle: (UITableViewCellStyle)style reuseIdentifier: (NSString *)reuseIdentifier
{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        self.dataArray = [NSMutableArray array];
        [self addAllViews];
    }
    return self;
}

- (void)addAllViews
{
    self.aLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 44)];
    self.aLabel.backgroundColor = [UIColor greenColor];
    [self.contentView addSubview:self.aLabel];
    self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 44, [UIScreen mainScreen].bounds.size.width, 0) style:UITableViewStylePlain];
    
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:#testCell];
//    [self.contentView addSubview:self.tableView];
}

- (void)showTableView
{
    [self.contentView addSubview:self.tableView];
}

- (void)hiddenTableView
{
    [self.tableView removeFromSuperview];
}

- (void)configureCellWithModel: (WGModel *)model
{
    [self.dataArray removeAllObjects];
    self.aLabel.text = model.place[#name];
    
    NSArray *array = model.pois;
    for (NSDictionary *dict in array) {
        NSString *str = dict[#name];
        [self.dataArray addObject:str];
    }
    CGRect frame = self.tableView.frame;
    frame.size.height = 44 * array.count;
    self.tableView.frame = frame;
    [self.tableView reloadData];
    
}


- (NSInteger)numberOfSectionsInTableView: (UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView: (UITableView *)tableView numberOfRowsInSection: (NSInteger)section
{
    return self.dataArray.count;
}

- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:#testCell forIndexPath:indexPath];
    NSString *str = self.dataArray[indexPath.row];
    cell.textLabel.text = str;
    return cell;
}






准备一个model类

        

        

[Java] 查看源文件 复制代码
//.h
#import 

#interface WGModel : NSObject

#property (nonatomic, assign) BOOL isShow;
#property (nonatomic, strong) NSDictionary *place;
#property (nonatomic, strong) NSArray *pois;

#end


//.m
#import WGModel.h

#implementation WGModel

- (void)setValue: (id)value forUndefinedKey: (NSString *)key
{
    
}

#end


最终效果:

        

        

        

        


                                               

14

主题

7051

帖子

1441

金钱

手工艺人

发表于 2018-1-11 11:59:58 | 显示全部楼层
帮帮顶顶!!

20

主题

7072

帖子

2313

金钱

手工艺人

发表于 2018-1-11 12:08:17 | 显示全部楼层
code4app好的内容真的很多~赞

23

主题

7075

帖子

1054

金钱

iOS大神

Rank: 6Rank: 6

分享大神

发表于 2018-1-11 12:18:05 | 显示全部楼层
写的真的很不错

16

主题

7097

帖子

1071

金钱

手工艺人

发表于 2018-1-11 12:24:55 | 显示全部楼层
好好 学习了 确实不错

20

主题

7101

帖子

2279

金钱

手工艺人

发表于 2018-1-11 12:38:12 | 显示全部楼层
好好 学习了 确实不错

0

主题

7049

帖子

-519

金钱

限制会员

发表于 2018-1-11 12:56:25 | 显示全部楼层
内容很好,棒棒哒
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

每日头条

通过邮件订阅最新 Code4App 信息
上一条 /4 下一条

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表