iOS中大流中的自定义cell 技术分享

来源:互联网 发布:陌生网友找我淘宝开店 编辑:程序博客网 时间:2024/06/05 03:45

AppDelegate.m指定根视图

 self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[RootTableViewController alloc] initWithStyle:UITableViewStylePlain]];
//根视图

RootTableViewController.m

#import "RootTableViewController.h"#import "TestCell.h"#import "TestModel.h"@interface RootTableViewController ()@property (nonatomic, strong) NSMutableArray *datasourceArray;@end@implementation RootTableViewController- (void)viewDidLoad{    [super viewDidLoad];        self.datasourceArray = [NSMutableArray array];        [self.tableView registerClass:[TestCell class] forCellReuseIdentifier:@"cell"];        for (int i = 0; i < 50; i++) {        TestModel *model = [TestModel new];        model.isShow = NO;        [self.datasourceArray addObject:model];    }    }

#pragma mark - Table view data source

数据源方法
#pragma mark - Table view data source- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{    return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    // Return the number of rows in the section.    return self.datasourceArray.count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    TestCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];        TestModel *model = self.datasourceArray[indexPath.row];        if (model.isShow) {                cell.label.text = @"展示view";        [cell addView];    } else {        cell.label.text = @"什么都没有";        [cell removeView];    }        return cell;}

返回高

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    TestModel *model = self.datasourceArray[indexPath.row];    if (model.isShow) {        return 300;    } else {        return 100;    }}
点击cell触发的方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    TestModel *model = self.datasourceArray[indexPath.row];    model.isShow = !model.isShow;    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];        [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];}
准备一个自定义cell

#import <UIKit/UIKit.h>@interface TestCell : UITableViewCell@property (nonatomic, strong) UILabel *label;@property (nonatomic, strong) UIView *redView;- (void)addView;- (void)removeView;@end#import "TestCell.h"@implementation TestCell- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {        [self addAllViews];    }    return self;}- (void)addAllViews{    self.label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 100)];    self.label.backgroundColor = [UIColor yellowColor];    [self addSubview:self.label];        self.redView = [[UIView alloc] initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 200)];    self.redView.backgroundColor = [UIColor redColor];    }- (void)addView{    [self addSubview:self.redView];}- (void)removeView{    [self.redView removeFromSuperview];}
准备一个model类

#import <Foundation/Foundation.h>@interface TestModel : NSObject@property (nonatomic, assign) BOOL isShow;@end

最终效果如下:




有好的建议和问题可微博私信:http://weibo.com/hanjunqiang


1 0
原创粉丝点击