美食屋-ios项目源码- tableView 的封装

我们要学会封装,慢慢培养一种封装的思想

这样对我们的项目开发很有用处

项目的成败一个在于创意 另一个就是编码的质量

想在市场上的项目很多很多,但是真正能经历住考验的软件不多

因为项目开发中有个很重要的因素:

我们开发的项目如果不去用mvc 的思想去设计我们的代码

这对后期我们对项目的升级维护 带来很大的麻烦

一个项目的流产与否与这个因素密切相关

所以我们要养成一种良好的编码习惯

这对公司项目的开发有这很重要的意义

良好的代码风格与代码习惯方便了我们的开发

举个简单的例子

我们团队正在开发一个项目:项目周期有三个月

当过了一个月之后,有一位成员要离职

这对整个团队带来了很大的麻烦

这个人写的代码 都堆积在控制器中,几千行代码

别人去理解也要很长时间 去修改一下 几百个bug

那么有个很好的解决办法,我们可以使用mvc 的思想去开发一个项目

虽然说不是每个项目都用mvc 但这个解决了我们很大一部分困难

我们开发项目中,所有的模块都可以看成一个组件

使用的时候装在在控制器

不使用的时候我们删除

这样代码维护 与软件的升级是相当有好处的

今天这个小项目是承接上一篇来写的

将tableView 进行封装,这里只贴出来 tableView 的封装

大家可以看见控制器中的代码变的很少 很干净

这样开发程序 给我们带来很多好处,也给别人减少了麻烦

//
//  QHContentView.h
//  广告轮播
//

#import <UIKit/UIKit.h>

@interface QHContentView : UIView
//提供一个类方法

@property(nonatomic,strong)NSArray *subject;
+(instancetype)contentView;
@end
//
//  QHContentView.m
//  广告轮播
//

#import "QHContentView.h"
#import "QHSubjectCell.h"
#import "QHAdsView.h"

@interface QHContentView()<UITableViewDataSource,QHAdsViewDelegate,UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *tableView;

@end

@implementation QHContentView

+(instancetype)contentView
{
    return [[[NSBundle mainBundle]loadNibNamed:NSStringFromClass([self class]) owner:nil options:nil]lastObject] ;
}

-(void)setSubject:(NSArray *)subject
{
    _subject = subject;

    //更新子控件UI 数据
    [self.tableView reloadData];

}
//加载xib 文件就会自动调用
-(void)awakeFromNib
{
    QHAdsView *adsView = [QHAdsView adsView];

    //[self.view addSubview:adsView];
    self.tableView.tableHeaderView = adsView;
    //    self.tableView.delegate = self;
    //    self.tableView.dataSource = self;

    adsView.images = @[@"ad_00",@"ad_01",@"ad_02",@"ad_03",@"ad_04"];
    adsView.delegate = self;

}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.subject.count;
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    QHSubjectCell *cell = [QHSubjectCell subjectCellWithTableView:tableView];

    cell.subject = self.subject[indexPath.row];

    return cell;

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 100;
}
/*

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

@end
#import "ViewController.h"
#import "QHAdsView.h"
#import "QHSubject.h"
#import "QHSubjectCell.h"
#import "QHContentView.h"

@interface ViewController ()<QHAdsViewDelegate,UITableViewDataSource,UITableViewDelegate>

@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property(nonatomic,strong)NSArray *plist;
@property(nonatomic,strong)NSArray *subject;

@end

@implementation ViewController

//懒加载  在从网络加载数据的时候我们 不能使用懒加载
// 会出现网络环境不好,加载延迟,所以不能使用

-(NSArray *)plist
{
    if (_plist == nil) {
        NSString *path = [[NSBundle mainBundle]pathForResource:@"quanquan.plist" ofType:nil];
        NSArray *array = [NSArray arrayWithContentsOfFile:path];

        _plist = array;

    }
    return _plist;
}

-(NSArray *)subject
{
    if (_subject == nil) {
        NSArray *dicts = self.plist[1];
        NSMutableArray *objs = [NSMutableArray array];

        for(NSDictionary *dict in dicts)
        {
            //kvc 键值编码
            QHSubject *subject = [QHSubject subjectWithDict:dict];
            //建立数据模型
            [objs addObject:subject];
        }
        _subject = objs;
    }
    return _subject;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    QHContentView *contentView = [QHContentView contentView];

    [self.view addSubview:contentView];

    contentView.subject = self.subject;

//    QHAdsView *adsView = [QHAdsView adsView];
//
//    //[self.view addSubview:adsView];
//    self.tableView.tableHeaderView = adsView;
////    self.tableView.delegate = self;
////    self.tableView.dataSource = self;
//
//
//
//    adsView.images = @[@"ad_00",@"ad_01",@"ad_02",@"ad_03",@"ad_04"];
//    adsView.delegate = self;
//
//
//    [adsView setAdsViewDidSelected:^(QHAdsView * adsView, NSString * image, NSInteger index) {
//        NSLog(@"%@&&&&&&",image);
//    }];
    // Do any additional setup after loading the view, typically from a nib.
}

//-(void)adsViewDidSelected:(QHAdsView *)adsView andImage:(NSString *)image andIndex:(NSInteger)index
//{
//    NSLog(@"%@",NSStringFromSelector(_cmd));
//}

//- (void)didReceiveMemoryWarning {
//    [super didReceiveMemoryWarning];
//    // Dispose of any resources that can be recreated.
//}
//
//#pragma mark UITableViewDelegate
//
//-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
//{
//    return self.subject.count;
//}
//
//
//
//-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
//{
//    /*
//    static NSString *cellName = @"cell";
//
//    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName];
//
//    if (cell == nil) {
//        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellName];
//    }
//    cell.textLabel.text = @"text";
//    return cell;
//     */
//
//    QHSubjectCell *cell = [QHSubjectCell subjectCellWithTableView:tableView];
//
//    cell.subject = self.subject[indexPath.row];
//
//    NSLog(@"%@",cell.subject);
//
//    return cell;
//}
//-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
//{
//    return 100;
//}

@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 16:12:44

美食屋-ios项目源码- tableView 的封装的相关文章

能够附加图片的标签控件iOS项目源码

这个源码案例是能够附加图片的标签控件,源码JTImageLabel,JTImageLabel能够附加图片的标签Label控件,图片可以随意更换.位置也能够很好的控制.效果图: <ignore_js_op> 使用方法: 支持CocoaPods: pod 'JTImageLabel', '~> 1.0' 用法相当简单,像普通Label那样使用: #import "JTImageLabel.h" @property (weak, nonatomic) IBOutlet JT

AA记账随手记ios项目源码

<ignore_js_op><ignore_js_op><ignore_js_op> <ignore_js_op> 7e92d710663400da83270303892ee509.jpg (33.45 KB, 下载次数: 0) 附件源码下载:http://code.662p.com/list/12_1.html 源码下载:http://pan.baidu.com/s/1pJmwiQf

可自定义导航条功能案例ios项目源码

可定制的navigationitem ,当我们使用系统的方法设置navigationItem的leftItem或者rightItem时,我们会 发现item位置会有偏差(左边的偏右,右边的偏左).当设置navigationItem的titleView时, 会发现图片被拉伸.因此我对系统的设置方法做了一个简单的封装,可以方便的设置navigationItem 的leftItem,titleView,rightItem并可以自主控制item的偏移量. 效果图: <ignore_js_op> 使用方

iOS那些值得参考的App项目源码

iOS那些值得参考的App项目源码 https://cloud.tencent.com/developer/article/1332192 https://github.com/siegrainwong/WeChat iOS工具——Xcode9无证书真机调试 原文地址:https://www.cnblogs.com/kaola8023/p/12145642.html

2016年最牛逼的分类Android项目源码免费一次性打包下载!

之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年开始不断整理源码区和其他网站上的安卓例子源码,目前总共有810套左右,根据实现的功能被我分成了100多个类,总共接近2.5G,还在不断更新.初学者可以快速方便的找到自己想要的例子,大神也可以看一下别人的方法实现.虽然的例子都是我一个人辛辛苦苦花了很多时间和精力整理的,但是既然这些例子是来自于社区那就让他们免费回归社区吧,(是的!特么的不要一分钱!最看不起那些挂羊头卖狗的)你可以在本帖里面按Ctrl+F查找你需要的关键字,

ParseChat聊天室应用项目源码

ParseChat是一个完全原生的iPhone应用程序,用于创建实时的.基于文本的Parse聊天室.功能:支持多台设备之间的实时聊天,可动态添加新的聊天室,支持基本配置,可发送和接收音效以及任意大小的消息,具有时间戳,可识别电话号码.链接.数据,向下轻扫隐藏键盘,无需后端编程等. 项目源码下载:http://code.662p.com/view/7768.html 详细说明:http://ios.662p.com/thread-1989-1-1.html

ZLMusic模仿百度音乐应用项目源码

func stopPlayMusic() { if (self.isStop == true) { self.player.pause() btn .setTitle("播放", forState:UIControlState.Normal) //var paused = player.currentTime self.songImageView.layer.speed = 0.0 }else{ self.player.play() btn .setTitle("暂停&quo

unity3d 项目源码下载链接

2-1 炉石传说 客户端加服务器端 链接:http://pan.baidu.com/s/1dDKY3Fr 密码:c03q 2-2 新仙剑奇侠传 链接:http://pan.baidu.com/s/1b4QVqI 密码:dic5 2-3 unity3d 战斗卡牌<变身吧主公>客户端+服务器源码 链接:http://pan.baidu.com/s/1kUpot51 密码:i02u 2-4 降临OL-U3D全套源码 链接:http://pan.baidu.com/s/1sktLQ5v 密码:we0g

Java SSM 商户管理系统 客户管理 库存管理 销售报表 项目源码

需求分析: 有个厂家,下面有很多代理商(商户或门头等),之前商户进货.库存.销售.客户资料等记录在excel表格中 或者无记录,管理比较混乱,盈利情况不明.不能有效了解店铺经营情况和客户跟踪记录 厂家也不能实时了解下面代理商的经营状况和库存情况 解决方案: 本系统角色主要分两个层级:总管理(厂家),下级管理(商户) 各商户管理自己的进销存数据和客户资料 厂家能查看所有商户实时经营情况 --------------------------------------------------------