首页 > 代码库 > iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建

iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建

iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建

一、实现效果

说明:该示例在storyboard中使用动态单元格来完成。

二、实现

1.项目文件结构和plist文件

2.实现过程以及代码

在tableview的属性选择器中选择动态单元格。

说明:在storyboard中直接使用其自带的动态单元格完成tableviewcell的定义,并创建了一个管理该cell的类,进行了连线。

实现代码:

数据模型部分:

TXApp.h文件

 1 //  08-应用管理 2 // 3 //  Created by 鑫 on 14-10-14. 4 //  Copyright (c) 2014年 梁镋鑫. All rights reserved. 5 // 6  7 #import <Foundation/Foundation.h> 8  9 @interface TXApp : NSObject10 /**11  图标12  */13 @property (copy, nonatomic) NSString *icon;14 /**15  名称16  */17 @property (copy, nonatomic) NSString *name;18 /**19  大小20  */21 @property (copy, nonatomic) NSString *size;22 /**23  下载量24  */25 @property (copy, nonatomic) NSString *download;26 27 28 @property (nonatomic, assign, getter = isDownloaded) BOOL downloaded;29 30 + (instancetype)appWithDict:(NSDictionary *)dict;31 - (instancetype)initWithDict:(NSDictionary *)dict;32 @end

 

TXApp.m文件

 1 #import "TXApp.h" 2  3 @implementation TXApp 4 + (instancetype)appWithDict:(NSDictionary *)dict 5 { 6     return [[self alloc] initWithDict:dict]; 7 } 8  9 - (instancetype)initWithDict:(NSDictionary *)dict10 {11     if (self = [super init]) {12         [self setValuesForKeysWithDictionary:dict];13     }14     return self;15 }16 @end

 

视图部分

 TXAppCell.h文件

 1 #import <UIKit/UIKit.h> 2 @class TXApp, TXAppCell; 3  4 @protocol TXAppCellDelegate <NSObject> 5 @optional 6 - (void)appCellDidClickedDownloadBtn:(TXAppCell *)cell; 7 @end 8 @interface TXAppCell : UITableViewCell 9 @property (nonatomic, strong) TXApp *app;10 11 @property (nonatomic, weak) id<TXAppCellDelegate> delegate;12 13 @end

 

 TXAppCell.m文件

 1 / 2 //  Created by 鑫 on 14-10-14. 3 //  Copyright (c) 2014年 梁镋鑫. All rights reserved. 4 // 5 #import "TXAppCell.h" 6 #import "TXApp.h" 7  8 @interface TXAppCell() 9 @property (weak, nonatomic) IBOutlet UIImageView *iconView;10 @property (weak, nonatomic) IBOutlet UILabel *nameView;11 @property (weak, nonatomic) IBOutlet UIButton *downloadView;12 @property (weak, nonatomic) IBOutlet UILabel *introView;13 - (IBAction)downloadClick:(UIButton *)btn;14 @end15 16 @implementation TXAppCell17 18 - (void)setApp:(TXApp *)app19 {20     _app = app;21     22     self.iconView.image = [UIImage imageNamed:app.icon];23     self.nameView.text = app.name;24     self.introView.text = [NSString stringWithFormat:@"大小:%@ | 下载量:%@", app.size, app.download];25     26     // 覆盖按钮的状态27     self.downloadView.enabled = (self.app.isDownloaded == NO);28 }29 /**30  *  点击了下载按钮31  */32 - (IBAction)downloadClick:(UIButton *)btn {33     // 1.让按钮失效34     self.app.downloaded = YES;35     btn.enabled = NO;36     37     // 2.通知代理38     if ([self.delegate respondsToSelector:@selector(appCellDidClickedDownloadBtn:)]) {39         [self.delegate appCellDidClickedDownloadBtn:self];40     }41 }42 @end

 

主控制器

TXViewController.m文件

 1 //  Created by 鑫 on 14-10-14. 2 //  Copyright (c) 2014年 梁镋鑫. All rights reserved. 3 // 4  5 #import "TXViewController.h" 6 #import "TXApp.h" 7 #import "TXAppCell.h" 8  9 @interface TXViewController () <TXAppCellDelegate>10 @property (nonatomic, strong) NSArray *apps;11 @end12 13 @implementation TXViewController14 - (NSArray *)apps15 {16     if (_apps == nil) {17         NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"apps_full.plist" ofType:nil]];18         19         NSMutableArray *appArray = [NSMutableArray array];20         for (NSDictionary *dict in dictArray) {21             TXApp *app = [TXApp appWithDict:dict];22             [appArray addObject:app];23         }24         _apps = appArray;25     }26     return _apps;27 }28 29 - (void)viewDidLoad30 {31     [super viewDidLoad];32     33 }34 35 - (BOOL)prefersStatusBarHidden36 {37     return YES;38 }39 40 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section41 {42     return self.apps.count;43 }44 45 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath46 {47     //拿到控制器的tableView48     TXAppCell *cell = [tableView dequeueReusableCellWithIdentifier:@"app"];49     cell.delegate = self;50     cell.app = self.apps[indexPath.row];51     return cell;52 }53 54 #pragma mark - cell的代理方法55 - (void)appCellDidClickedDownloadBtn:(TXAppCell *)cell56 {57     // 1.添加标签58     UILabel *label = [[UILabel alloc] init];59     label.text = [NSString stringWithFormat:@"成功下载%@", cell.app.name];60     label.font = [UIFont systemFontOfSize:12];61     label.textAlignment = NSTextAlignmentCenter;62     label.textColor = [UIColor whiteColor];63     label.backgroundColor = [UIColor blackColor];64     label.frame = CGRectMake(0, 0, 150, 25);65     label.center = CGPointMake(160, 240);66     label.alpha = 0.0;67     label.layer.cornerRadius = 5;68     label.clipsToBounds = YES;69     [self.view addSubview:label];70     71     // 2.动画72     [UIView animateWithDuration:0.5 animations:^{73         label.alpha = 0.5;74     } completion:^(BOOL finished) {75         [UIView animateWithDuration:0.5 delay:0.5 options:UIViewAnimationOptionCurveLinear animations:^{76             label.alpha = 0.0;77         } completion:^(BOOL finished) {78             [label removeFromSuperview];79         }];80     }];81 }82 83 84 @end

 

补充说明

  在程序中通过标示符取出对应的cell,是因为在storyboard中已经对cell打上了标示符(app)的标签。

 1 //组-行-数据 2 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 3 { 4     //创建cell 5     static NSString *identifier=@"app"; 6     YYappCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier]; 7     //设置cell的数据 8     YYappInfo *appinfo=self.apps[indexPath.row]; 9     //设置代理10     cell.delegate=self;11     cell.app=appinfo;12     //返回cell13     return cell;14 }

 

iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建