iOS 基于MVC设计模式练习UITableView使用 —— HERO博客
来源:互联网 发布:软件开发招标 编辑:程序博客网 时间:2024/04/28 12:11
上一篇简述了UITableView的使用,本篇基于MVC模式继续练习使用UITableView。
UITableView具体属性及方法可以参考文章:UITableView简介
UITableView简单使用可以参考文章:UITableView使用练习
MVC设计模式简介可以参考文章:MVC设计模式简介
写了个简单的例子,控制器继承UITableViewController,不需要再去手动添加协议,设置代理。遵循MVC设计模式,自定义头部视图、Cell、Model数据模型效果如图32-1:
下面贴上代码:
HWTableViewController:
#import <UIKit/UIKit.h>@interface HWTableViewController : UITableViewController@end#import "HWTableViewController.h"#import "HWHeaderView.h"#import "HWTableViewCell.h"#import "HWCellModel.h"@interface HWTableViewController ()@property (nonatomic, strong) NSMutableArray *HWInfoArray;@end@implementation HWTableViewController- (NSMutableArray *)HWInfoArray{ if (_HWInfoArray == nil) { _HWInfoArray = [NSMutableArray array]; } return _HWInfoArray;}- (void)viewDidLoad { [super viewDidLoad]; //创建头部视图 self.tableView.tableHeaderView = [[HWHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 100)]; //获取数据 [self getInfo];}- (void)getInfo{ //实际开发数据是网络获取到的,这里模拟给出一个数据 NSArray *array = @[@[@{@"image" : @"hero", @"title" : @"标题1", @"subTitle" : @"副标题1"}, @{@"image" : @"hero", @"title" : @"标题2", @"subTitle" : @"副标题2"}], @[@{@"image" : @"hero", @"title" : @"标题3", @"subTitle" : @"副标题3"}, @{@"image" : @"hero", @"title" : @"标题4", @"subTitle" : @"副标题4"}, @{@"image" : @"hero", @"title" : @"标题5", @"subTitle" : @"副标题5"}, @{@"image" : @"hero", @"title" : @"标题6", @"subTitle" : @"副标题6"}, @{@"image" : @"hero", @"title" : @"标题7", @"subTitle" : @"副标题7"}]]; //解析数据,转模型保存 for (int i = 0; i < array.count; i++) { NSMutableArray *tempArray = [NSMutableArray array]; for (NSDictionary *dict in array[i]) { [tempArray addObject:[HWCellModel HWInfoWithDictionary:dict]]; } [self.HWInfoArray addObject:tempArray]; }}#pragma mark - Table view data source//组数- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return self.HWInfoArray.count;}//组中行数- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return [self.HWInfoArray[section] count];}//cell内容- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ HWTableViewCell *cell = [HWTableViewCell cellWIthTableView:tableView]; cell.model = self.HWInfoArray[indexPath.section][indexPath.row]; return cell;}//点击事件- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ //获取到当前被点击的cell HWTableViewCell *cell = (HWTableViewCell *)[tableView cellForRowAtIndexPath:indexPath]; NSString *str = [NSString stringWithFormat:@"点击了第%ld组第%ld行", indexPath.section, indexPath.row]; cell.lable.text = str;}//设置行高- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 70.0f;}//设置头部标题- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ if (section == 0) { return @"第一组"; } return @"第二组";}//设置尾部标题- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section{ return @"这是尾部标题";}@end
HWHeaderView:
#import <UIKit/UIKit.h>@interface HWHeaderView : UIView@end#import "HWHeaderView.h"@implementation HWHeaderView//重写init方法- (id)initWithFrame:(CGRect)frame{ if (self = [super initWithFrame:frame]) { //创建一个标签作为头部视图 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 100)]; label.text = @"这是头部视图"; label.textAlignment = NSTextAlignmentCenter; label.textColor = [UIColor whiteColor]; label.backgroundColor = [UIColor grayColor]; [self addSubview:label]; } return self;}@end
HWTableViewCell:
#import <UIKit/UIKit.h>@class HWCellModel;@interface HWTableViewCell : UITableViewCell@property (nonatomic, weak) UILabel *lable;@property (nonatomic, strong) HWCellModel *model;+ (instancetype)cellWIthTableView:(UITableView *)tableView;@end#import "HWTableViewCell.h"#import "HWCellModel.h"@interface HWTableViewCell ()@property (nonatomic, weak) UIImageView *imgView;@property (nonatomic, weak) UILabel *subLabel;@end@implementation HWTableViewCell+ (instancetype)cellWIthTableView:(UITableView *)tableView{ //cell复用,唯一标识 static NSString *identifier = @"HWCell"; //先在缓存池中取 HWTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; //缓存池中没有再创建,并添加标识,cell移出屏幕时放入缓存池以复用 if (cell == nil) { cell = [[HWTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } return cell;}//重写init方法构建cell内容- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { //图片 UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 80, 60)]; [self.contentView addSubview:imageView]; self.imgView = imageView; //标题 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(imageView.frame) + 10, 15, 200, 20)]; label.font = [UIFont systemFontOfSize:20.0f]; [self.contentView addSubview:label]; self.lable = label; //副标题 UILabel *subLabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(imageView.frame) + 10, 40, 200, 13)]; subLabel.font = [UIFont systemFontOfSize:13.0f]; [self.contentView addSubview:subLabel]; self.subLabel = subLabel; self.backgroundColor = [UIColor whiteColor]; } return self;}//重写set方法,模型传递- (void)setModel:(HWCellModel *)model{ _model = model; self.imgView.image = [UIImage imageNamed:model.image]; self.lable.text = model.title; self.subLabel.text = model.subTitle;}@end
HWCellModel:
#import <Foundation/Foundation.h>@interface HWCellModel : NSObject@property (nonatomic, copy) NSString *image;@property (nonatomic, copy) NSString *title;@property (nonatomic, copy) NSString *subTitle;- (id)initWithDictionary:(NSDictionary *)dict;+ (id)HWInfoWithDictionary:(NSDictionary *)dict;@end#import "HWCellModel.h"@implementation HWCellModel- (id)initWithDictionary:(NSDictionary *)dict{ self = [super init]; if (self) { [self setValuesForKeysWithDictionary:dict]; } return self;}+ (id)HWInfoWithDictionary:(NSDictionary *)dict{ return [[self alloc] initWithDictionary:dict];}@end
3 0
- iOS 基于MVC设计模式练习UITableView使用 —— HERO博客
- iOS 基于MVVM设计模式练习UITableView使用 —— HERO博客
- iOS UITableView使用练习 —— HERO博客
- iOS MVC设计模式与MVVM设计模式简介 —— HERO博客
- iOS UITableView简介 —— HERO博客
- iOS UITableView添加长按事件 —— HERO博客
- iOS UITableView性能优化 —— HERO博客
- iOS UISearchBar使用 —— HERO博客
- iOS UICollectionView实用练习 —— HERO博客
- iOS 图文混排,UITableView实现图文混排 —— HERO博客
- iOS 正则表达式的使用 —— HERO博客
- iOS UIScrollView简介 —— HERO博客
- iOS UICollectionView简介 —— HERO博客
- iOS UITextField简介 —— HERO博客
- iOS UIDynamic简介 —— HERO博客
- iOS 添加字体库 —— HERO博客
- iOS MD5加密 —— HERO博客
- iOS 预产期计算器 —— HERO博客
- nyoj 飞翔d
- c语言操作数据库sql
- UESTC--1253--阿里巴巴和n个大盗(博弈)
- /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
- pat1011:A+B和C
- iOS 基于MVC设计模式练习UITableView使用 —— HERO博客
- 公共技术点之 Java 注解 Annotation
- 最长公共子序列(连续)
- 数据存储类型
- Hadoop 1.x HDFS常见Shell命令
- matlab实现相位解包裹
- leetcode-109-Convert Sorted List to Binary Search Tree
- MySQL学习笔记3(创建、修改、删除表)
- hdu 1598 find the most comfortable road(并查集判断图联通)