zoukankan      html  css  js  c++  java
  • 新闻头条-软件开发

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

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

    今天讲的这些问题适合刚開始学习的人学习

    这个项目使用了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
    


  • 相关阅读:
    FreeRTOS 动态内存管理
    NODE.JS之我见
    Maven使用详解
    WPF依赖属性详解
    对比MFC资源文件谈谈WPF布局方式
    MAPPING SEGMENTS TO PAGES
    只用一行代码让你的ASP.NET MVC 跑起来
    WPF The Hard Way
    Java判断回文数算法简单实现
    2014让我受益最大的那些书--别找了,都在这里
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7056102.html
Copyright © 2011-2022 走看看