新闻头条-软件开发

在我们生活中,浏览新闻的软件处处可见,今日头条,腾讯新闻我们可以浏览到最新的咨询

手机新闻时时在更新,而且内容格式不一,对于开发者来说必须好好进行需求分析

今天讲的这些问题适合初学者学习

这个项目使用了mvc 设计思路 将数据 view controller 进行分离 分别进行封装

这个项目 有几个模块 有四种不同的cell 里面的内容 图片 也不同 ,我们要对其进行一层层封装

好的代码不是一下完成的 我们需要先将基本功能完成,然后对我们的代码进行重构,优化

这样以来代码的质量会提升,并且易于维护,增加了这款软件的生命周期

上主要代码了:

//
//  QHViewController.h

#import <UIKit/UIKit.h>

@interface QHViewController : UIViewController

@end
//  QHViewController.m

#import "QHViewController.h"
#import "QHnews.h"
#import "NSArray+Ext.h"
#import "QHLargeCell.h"
#import "QHListCell.h"
#import "QHOriginCell.h"
#import "QHAppCell.h"

@interface QHViewController ()<UITableViewDataSource,UITableViewDelegate>

@property(nonatomic,strong)NSArray *newses;

@end

@implementation QHViewController

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

        NSMutableArray *objs = [NSMutableArray array];
        for(NSDictionary *dic in array)
        {
            //封装模型
            QHnews *news = [QHnews newsWithDict:dic];
            [objs addObject:news];

        }

        _newses = objs;
    }
    return _newses;
}

#pragma mark UITableViewDataSource 代理方法
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.newses.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell * cell = [[UITableViewCell alloc]init];
    /*
    if (cell == nil) {
        cell = [tableView dequeueReusableCellWithIdentifier:cellName];
    }
    cell.textLabel.text = @"test";
    */

    QHnews *news = self.newses[indexPath.row];
    if ([news.category isEqualToString:@"large"]) {
        QHLargeCell *cell = [QHLargeCell largeCellWithTableView:tableView];
        cell.news = self.newses[indexPath.row];
        return cell;
    }
    if ([news.category isEqualToString:@"list"]) {
        QHListCell *cell = [QHListCell listCellWithTableView:tableView];
        cell.news = self.newses[indexPath.row];
        return cell;
    }
    if ([news.category isEqualToString:@"origin"]) {
        QHOriginCell *cell = [QHOriginCell originWithTableView:tableView];
        cell.news = self.newses[indexPath.row];
        return cell;
    }
    if([news.category isEqualToString:@"app"])
    {
        QHAppCell *cell = [QHAppCell appWithTableView:tableView];
        cell.news = self.newses[indexPath.row];
        return cell;
    }
    return cell;

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    QHnews *news = self.newses[indexPath.row];

    if([news.category isEqualToString:@"large"])
    {
        return 150;
    }
    if ([news.category isEqualToString:@"list"]) {
        return 150;

    }
    if([news.category isEqualToString:@"origin"])
    {
        return 100;
    }
    if ([news.category isEqualToString:@"app"]) {
        return 120;
    }
    return 100;
}
-(BOOL)prefersStatusBarHidden
{
    return YES;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    //NSLog(@"%@",self.newses);

    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

视图封装:

//
//  QHLargeCell.h

#import <UIKit/UIKit.h>
#import "QHnews.h"

@interface QHLargeCell : UITableViewCell
@property(nonatomic,strong)QHnews *news;
+(id)largeCellWithTableView:(UITableView *)tableView;

@end
//
//  QHLargeCell.m

#import "QHLargeCell.h"

@interface QHLargeCell()
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UIImageView *pictureImageView;

@property (weak, nonatomic) IBOutlet UILabel *sourceLabel;

@property (weak, nonatomic) IBOutlet UILabel *timeLabel;

@end

@implementation QHLargeCell

+(id)largeCellWithTableView:(UITableView *)tableView
{
    NSString *name = NSStringFromClass([self class]);
    UINib *nib = [UINib nibWithNibName:name bundle:nil];

    [tableView registerNib:nib forCellReuseIdentifier:name];

    return [tableView dequeueReusableCellWithIdentifier:name];
}

-(void)setNews:(QHnews *)news
{
    _news = news;

    self.titleLabel.text = news.title;
    self.sourceLabel.text = news.source;
    self.timeLabel.text = news.time;
    self.pictureImageView.image = [UIImage imageNamed:news.picture];
   // NSLog(@"%@---------------",news.picture);
   // NSLog(@"%@++++++",self.pictureImageView.image);
}

- (void)awakeFromNib {
    // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

数据模型封装

//
//  QHnews.h

//建立数据模型

#import <Foundation/Foundation.h>

@interface QHnews : NSObject

/**
 *  新闻条目分类
 */
@property(nonatomic,copy)NSString *category;
/**
 *  记录图片数组
 */
@property(nonatomic,strong)NSArray *pics;

/**
 *  数据来源
 */

@property(nonatomic,copy)NSString *source;
/**
 *  发布时间
 */

@property(nonatomic,copy)NSString *time;

/**
 *  标题
 */

@property(nonatomic,copy)NSString *title;

/**
 *  用来记录单张图片
 */
@property(nonatomic,copy)NSString *picture;

/**
 *  用来记录推广软件的名称
 */
@property(nonatomic,copy)NSString *appname;

/**
 *  推广软件图片
 */
@property(nonatomic,copy)NSString *icon;

@property(nonatomic,strong)QHnews *news;
+(id)newsWithDict:(NSDictionary *)dict;
-(id)initWithDict:(NSDictionary *)dict;
@end
//
//  QHnews.m

#import "QHnews.h"

@implementation QHnews
+(id)newsWithDict:(NSDictionary *)dict
{
    return [[self alloc]initWithDict:dict];
}
-(id)initWithDict:(NSDictionary *)dict
{
    if (self == [super init]) {
        [self setValuesForKeysWithDictionary:dict];
    }

    return self;
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"catefory = %@,source = %@,title = %@", _category,_source,_title];
}
@end

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

时间: 2024-10-07 13:35:17

新闻头条-软件开发的相关文章

程序员带你十天快速入门Python,玩转电脑软件开发(二)

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到熟悉的效果. 声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群538742639.群马上就满了,名额不多. 上节课主要讲解了以下内容: 为什么学习Pyth

程序员带你十天快速入门Python,玩转电脑软件开发(三)

声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群538742639.群马上就满了,名额不多. 这是高级程序员快速入门Python语言课程.助你快速学习Python语言.这是第三课. 程序员带你十天快速入门Python,玩转电脑软件开发(一) 程序员带你十天快速入门Python,玩转电脑软件开发(二) 因技术知识连贯性,还没有学习前两课的同学,建议点

电脑小白学习软件开发-C#语言基础之循环重点讲解,习题

写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用视频. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是不在话下. 本教程是基础教程,适合任何有志于学习软件开发的人.当然因为技术的连贯性,推荐按照顺序查看. 上次课程:电脑小白自学软件编程-.Net语法基础之循环语句,纯技巧干货 近期,致力于进行C#语言教程的写作.写一系列可以供电脑小白学习软件开发的文章,帮助更多初学者入门学习IT编程. 课程总目录:因头条无法自定义目录,大家关注:“做全栈攻城狮”微信公众号

程序员带你十天快速入门Python,玩转电脑软件开发(一)

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到熟悉的效果. 声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言的你.有梦想的你,立志做全栈攻城狮. 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群538742639.群马上就满了,名额不多. 目录: 为什么学习Python? Pyt

软件开发生涯

我的软件开发生涯 (10年开发经验总结和爆栈人生) 简介 网名灵感之源,智能实验室创始人,从事软件开发超过10年,写过千万下载量软件,热衷开源,写过多个爆栈项目(系统开发技术栈..Net技术栈.数据库技术栈.前端开发技术栈).现定居于澳大利亚悉尼,研发经理,从事系统架构开发. 爆栈人生 现在流行说全栈.每种开发都有其相关的技术.您是否觉得难以罗列某种开发所包括对技术(技术栈)呢? 您是否想过: 我做的这个职业,究竟包含哪些技术呢? 我所掌握的技术这个子集,在整个技术大系这个超集里面占的比例是多少

软件开发的“三重门”(转载)

转载自陈皓的coolshell. 自从上次写了“程序员技术练级攻略” 以来,就觉得似乎还有很多东西没有谈到,但当时没有继续思考了.而春节前有人问我,是做底层技术,还是做业务.这问题让我思考了很多,不由自主地回顾了一 下我这十多年的软件开发经历,并顺着整理分类了一下自己解决过的若干问题,还发散想了很多,经过了一个春节假期的发酵,产生了下面这篇文章. 前言 这篇文章必然是通过我的个人经历来写的.所以,我先说说个人经历吧.我的经历基本分成三个阶段. 第一阶段:我 刚毕业时在家乡的某银行工作,做些银行的

新闻编辑软件,文档编辑软件,稿件编辑软件-文案编辑工具

智搜(Giiso)科技成立于2013年是,中国领先的"人工智能+资讯"领域的国家级高新技术企业,其自主研发的写作机器人,编辑机器人是可以从各个行业领域快速编辑写稿的人工智能机器人.编辑机器人就是通过AI技术来智能化提供文本的分类.分词.关键词提取等工作,极大提高文本处理效率.智能化的资讯频道定制服务专家,无需人工编辑,资讯内容自动化生成.助力资讯运营"无人化编辑",实现内容的7*24小时实时更新,是企业内容运营的好帮手. AI赋能依托人工智能智能语义技术,自动生成内

这群超酷的开发者,是如何轻松搞定软件开发?

前些日子我看到两则有关线上Office的新闻,一是空客的十三万员工将全部迁移到谷歌的在线文档套件G Suite:二是腾讯发布在线文档产品,可以与微软Excel和Word互转.在网页里就能写文档.做电子表格,对于20年前熟练地玩耍着Office 97的我来说这是极难以想像的.时至今日,不单是Office,连同图像处理.3D模型设计都可以在一张网页内轻松完成. 这些创新的背后是无数位软件开发人员智慧的结晶,如果说Software is eating the world, 那么developers a

社交软件开发,直播系统开发,区块链IM社交app系统开发

社交软件的出现,不仅仅为我们提供了一个平台,它还最大限度地聚集各类资源,为我们认识其他地域.不同领域的人提供了各种可能性.社交软件开发 Tel: 前面138中间2315后面3201 一款社交软件的间接交流怎么做才算好? 首先就是内容来源的丰富性:用户在任意一个地方看到的内容都能轻松分享到这款社交软件上,新闻.视频.音乐.文章.图片等等,无论从哪里看到可以一键分享是非常重要的诉求. 其次是互动性:如果你分享的内容没有办法被回应,那也就没有了之前提到的间接交流具有发起方期望得到多个接收方反馈的特点,