iOS中 自訂cell升級版 (進階)

來源:互聯網
上載者:User

iOS中 自訂cell升級版 (進階)

 

指定根視圖:

 

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

 

RootTableViewController.m

 

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

請求資料:

 

 

- (void)loadDataAndShow{    NSURL *url = [NSURL URLWithString:@http://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

 

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

自適應高

 

 

- (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會走的方法

 

 

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

 

 

//.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類

 

 

//.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

最終效果:

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.