您的位置:首页 > 移动开发 > IOS开发

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

2015-11-03 09:15 302 查看
AppDelegate.m指定根视图

[objc] view
plaincopy

self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[RootTableViewController alloc] initWithStyle:UITableViewStylePlain]];

//根视图

RootTableViewController.m

[objc] view
plaincopy

#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
数据源方法

[objc] view
plaincopy

#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;

}

返回高

[objc] view
plaincopy

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

{

TestModel *model = self.datasourceArray[indexPath.row];

if (model.isShow) {

return 300;

} else {

return 100;

}

}

点击cell触发的方法

[objc] view
plaincopy

- (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

[objc] view
plaincopy

#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类

[objc] view
plaincopy

#import <Foundation/Foundation.h>

@interface TestModel : NSObject

@property (nonatomic, assign) BOOL isShow;

@end

最终效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: