毕业设计(论文)-基于iOS的新闻客户端的设计与实现.doc_第1页
毕业设计(论文)-基于iOS的新闻客户端的设计与实现.doc_第2页
毕业设计(论文)-基于iOS的新闻客户端的设计与实现.doc_第3页
毕业设计(论文)-基于iOS的新闻客户端的设计与实现.doc_第4页
毕业设计(论文)-基于iOS的新闻客户端的设计与实现.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

盐 城 师 范 学 院毕业设计基于iOS的新闻客户端的设计与实现学生姓名 学 院 信息工程学院 专 业 网络工程 班 级 学 号 指导教师 2016年 5月 16日盐城师范学院毕业设计基于iOS的新闻客户端的设计与实现摘 要在移动互联网飞速发展的今天,智能手机的上网速度越来越快,人们获取新闻的方式也在飞速的发生改变,越来越多的人们偏向于在手机上阅读各式各样的新闻,手机新闻客户端以其便携方便、内容丰富的特性赢得了广大的市场空间。对新闻客户端的需求分析,确定共分为三大模块:新闻主模块、用户模块、天气查询模块。新闻主模块包含新闻主界面、新闻列表界面以及新闻详情阅读界面;用户模块包含我的账号界面,我的收藏界面,问题反馈和关于我们界面;天气查询模块界面支持查询天气情况。新闻主模块的设计包含在新闻主界面上集成浏览图片新闻以及九种类型的新闻内容,每类新闻点击进入对应的新闻列表,列表支持收藏新闻,点击新闻标题可进入新闻详情阅读界面,该界面提供阅读完整的新闻内容和分享新闻内容;用户模块的设计包含使用第三方登录获取用户信息并展现在我的账号中,我的收藏展示收藏过的新闻,问题反馈则支持提交反馈及查看反馈情况,关于我们中添加致谢语及联系我们的拨打电话支持;天气查询模块通过提交城市名从服务器获取天气情况。通过以上对客户端各模块的设计,使得新闻客户端可以稳定运行,新闻客户端以Xcode为编译开发工具,运行于搭载iOS系统的iPhone6机器,采用ObjectiveC为编程语言,以Core Data框架完成对SQLite数据库的数据存储。该新闻客户端迎合如今各年龄阶层用户不断养成的移动阅读习惯,以及便于用户对零散时间的使用,满足了用户对不同种类新闻关注度不断提高的要求,各种类的新闻内容满足了各式各样的用户需求。【关键词】iOS;新闻客户端;设计;实现全套设计加扣 3012250582Design and implementation of news client based on iOS AbstractIn todays rapid development of mobile Internet, intelligent mobile phone Internet speed more and more quickly, the way people get their news is changing rapidly occurs, more and more people prefer to read on the phone all kinds of news, news client with its portable and convenient, content-rich features to win the majority of the market space.News client needs analysis to determine is divided into three modules: News Main Module, User Module, Check The Weather Module. News Main Module includes news main interface, news list interface and news details reading interface; User Module includes my account interface, my collection interface, question and feedback interface and about us interface; Check The Weather Module supports querying weather conditions. News Main Module design on the news the main interface, integrated picture news and nine categories of news, every class news Click to enter the corresponding list of news, a list of supported collection of news, click on the headlines to enter the news details read interface that provides read full news content and share news content; User Module design uses a third party to obtain user information and show the my account interface, my collection interface display collections news, question and feedback interface supports submit feedback and view feedback about our module to add Acknowledgements and call support; Check The Weather Module get weather from the server by submitting a city name.By designing each module above for the client, so that news client stable operation, news client with Xcode to compile development tool running on iPhone6 machine running iOS system, using Objective-C programming language, with Core Data framework completed SQLite database for data storage.The news client cater to users of all ages continue to develop reading habits now, as well as user-friendly use of fragmented time, to meet the users of different types of news attention increasing, various types of news content to meet all kinds of variety of user needs. Key words iOS;News Client;Design;Achieve目 录1 绪论11.1 设计背景11.2 设计内容11.3 设计意义11.4 组织结构22 需求分析22.1 功能性需求分析22.1.1 新闻主模块22.1.2 用户模块32.1.3 天气查询模块32.2 非功能性需求32.3 开发环境及技术42.3.1 开发环境42.1.3 开发技术43 客户端模块设计43.1 功能模块设计53.1.1 新闻主模块设计53.1.2 用户模块设计53.1.3 天气查询模块设计73.2 数据库分析73.2.1 新闻收藏表设计83.2.2 第三方登录信息表设计83.2.3 反馈信息表设计94 界面设计与实现94.1 新闻主模块94.1.1 新闻主模块主界面94.1.2 各种类新闻列表界面124.1.3 新闻详情阅读界面174.2 用户模块204.2.1 我的账号界面204.2.2 我的收藏界面224.2.3 问题反馈界面234.2.4 关于我们界面254.3 天气查询模块265 功能测试275.1 新闻主模块测试275.2 用户模块测试285.3 天气查询模块测试286 总结30参考文献31致 谢321 绪论1.1 设计背景随着智能手机的普及率越来越高,加上3G网络、4G牌照的发放,更有到处都能搜到的WiFi信号,包含图片、视频、文字的新闻可以更快的带给人们最新最生动的新闻内容。iiMedia Research(艾媒咨询)数据显示,截至2015年上半年,中国手机新闻客户端用户规模已达到4.89亿,相比去年底增长9.2%。手机新闻客户端在手机网民中的渗透率已达74.5%。艾媒咨询分析师认为,随着阅读习惯的改变,人们越来越倾向于即时性、碎片化的新闻,传统新闻获取渠道已经无法满足手机网民追求多样化新闻的需求,而手机新闻客户端凭借其在移动端良好的表现,得到了用户的认可1。据统计苹果公司生产的iPhone携带的iOS系统更是广受青少年们的青睐,赛诺统计的销售额份额排行榜中表明,苹果占据37.5%的销售额份额,占据了很大部分的智能手机市场,因此便便产生基于iOS平台的新闻客户端设计的强烈需求。目前市面上常见的新闻客户端也有不少,如:新浪新闻,网易新闻,腾讯新闻等,都是移动端功能比较完善的新闻客户端2。本设计当中熟练运用Objective-C语言进行项目开发,不仅完成了基础不同新闻种类的阅读,更集成了新闻收藏、分享、第三方登录以及天气查询的功能。1.2 设计内容本设计主要研究如何在iOS系统上,通过各类控件的搭配完成对新闻客户端主要界面的搭建,使用网络解析获取新闻内容并展现在各类控件,使用数据库完成对收藏数据的保存,以及后期集成SDK增加分享登录的功能。需要实现的主要模块分为:新闻主模块、我的账号模块及天气查询模块。新闻主模块需要完成对不同种类新闻的阅读、收藏、分享的功能;用户模块需要完成登录第三方平台并获取账号信息的功能、查阅收藏新闻功能、用户反馈功能以及关于我们功能;天气查询模块则需要对正确的城市进行天气的查询。1.3 设计意义该客户端的主要实现意义就在于现如今人们对移动阅读习惯的养成,对零散时间的有效化利用,以及对各类新闻的关注不断的提高,越来越多的人们使用手机客户端进行新闻浏览,这就决定了它的实现对市场具有一定的价值,对从事软件开发工作也具有重要意义,设计中融入了如今iOS开发的主流技术,在对有意向从事软件开发行业的同学也有很大意义与帮助。1.4 组织结构本设计的组织结构如下:1.绪论:本章主要介绍新闻客户端的背景、内容及意义。2.需求分析:本章主要介绍客户端的需求分析、开发工具及技术介绍。3.客户端模块设计:本章主要介绍功能模块设计及数据库设计。4.界面设计与实现:本章主要介绍各模块相关界面的设计与实现。5.功能测试:本章主要介绍新闻主模块、用户模块及天气查询模块的功能测试。6.结论:本章总结全文,描写了完成设计及论文后的感触。2 需求分析2.1 功能性需求分析功能性需求分析是设计之初提出的对整个设计内容以及需要达到的功能的规定,设计需要按照需求分析规定的功能及效果进行相应的开发,图2-1为客户端功能需求结构图。图2-1 客户端功能需求结构图2.1.1 新闻主模块1.新闻主模块界面用来提供不同的新闻种类供用户挑选,上侧增加一个图片轮播器用来轮播唯美图片或者图片新闻,点击可以进入图片新闻的详情浏览,下方的九宫格新闻界面展示了对应的九类新闻图标,每个图标点击后都能跳转对应的每种新闻列表。2.进入新闻列表界面后,该界面则以UITableView控件展现该类新闻的列表,新闻列表区分了纯文字新闻标题以及图文混合新闻标题,要求每条新闻的展示都要根据从百度新闻API服务器获取到的新闻数据排版,若返回的picUrl字段为空则以纯文字标题显示,即上方文字标题,左下方新闻日期,右下方收藏按钮,若picUrl有值则以图文混合新闻标题显示,左上方为新闻图片,图片右侧接新闻文字标题,左下角为新闻日期,右下角为收藏按钮。收藏按钮点击即将这条新闻的所有信息保存数据库,放入我的账号模块中的收藏列表中以供查阅。3.每条新闻标题点击后进入新闻详情界面,新闻详情界面将上个界面传递过来的新闻详情地址使用UIWebView控件进行展现,界面的右上角添加分享按钮,可以将该新闻分享出去,分享平台为QQ、微信、以及微博。2.1.2 用户模块用户模块集成了我的账号、我的收藏、问题反馈、关于我们四个小模块。点击我的账号选择登录方式可以跳转新浪微博App进行登录操作,如果没有新浪微博则在网页登录,登录之后头像将会显示在用户界面的主界面,我的账号中也会显示用户资料相关信息;我的收藏中以列表形式显示之前收藏过的新闻,并且可以删除不需要的新闻;用户反馈中可以提交问题报告,还可以查看反馈信息,查看反馈信息可以看到问题处理还是未处理以及提交和处理时间、处理人员工号和处理结果;关于我们则是自我介绍以及联系我们,点击联系我们则可以拨打界面上的电话。2.1.3 天气查询模块天气界面跟新闻主界面同级,界面提供天气查询功能并且显示今日天气状况以及未来四天天气状况。2.2 非功能性需求非功能性需求与功能性需求是相辅相成的,非功能性需求主要规定的是设计的整体规格而不是某一项单独的模块。整个设计保持统一的设计风格,导航栏用红色做基调色;设计当中不能出现内存原因导致的闪退;设计在通用设备上适配良好(适配不同尺寸iPhone);注重用户体验,不要出现有违用户习惯的逻辑设计;支持一定的可扩展性,允许新的新闻模块增加。2.3 开发环境及技术2.3.1 开发环境1.新闻客户端开发系统为苹果公司开发的用于移动设备的iOS操作系统,它是属于类Unix的商业操作系统3。2.新闻客户端开发工具是Xcode,它包含了源文件编辑器、全面丰富的接口文档、Interface Builder以及iPhone模拟器4。3.新闻客户端开发语言是Objective-C语言,它是C语言的一个超集,它具有面向对象的特性,不支持多继承,但是可以使用委托代理来实现多重继承的功能5。2.1.3 开发技术1.Cocoa Touch框架中包含了Foundation框架和Uikit框架6。Foundation框架完成了根类NSObject搭建,其中定义了基本对象行为,还实现了基本数据类型如字符串、数字、数组和字典,提供了一些基本工具如国际化、对象持久化、文件管理以及XML文件处理的工具。Foudation还可以访问地层系统的实体对象和服务如进程、线程、端口以及锁。UIKit框架是iOS开发上强大并且全面的用户图形包,基于它完成了UI开头的所有图形类的搭建,iOS系统上各式各样的控件才得以展现并完成各自的数据交互以及控件之前的数据交互7。2.CoreData框架不是数据库,它是一个框架,它提供了对象-关系映射(ORM)的功能,能完成OC对象与数据的相互转化,既能保存进SQLite数据库文件中,又能将数据库中的数据还原成OC对象8。3.Auto Layout是苹果针对屏幕适配提出的一套解决方案,它是一种基于约束的,描述性的布局系统,可以使用数学描述来布局应用程序的界面,它可以通过在对象上设置约束自动调整对象的位置以及大小9。4.JSON是一个轻量级的独立于语言的数据交换格式,现在已经成为了客户端与服务器数据交互的首选交互格式。客户端中网络请求语言格式基本都是基于JSON格式10。3 客户端模块设计客户端的整体构架设计是采用MVC设计模式,即Model-View-Controller模式。Model指的是业务模型,View指的是用户界面,Controller顾名思义指控制器,MVC模式在本设计中具体体现的就是Model体现在数据库操作层,用来存放数据库模型以便对数据库的调用;View也就是StoryBoard文件,根据需求确定控件的种类以及布局;Controller就是.m文件,.m文件中更多的是对业务逻辑的处理,协调模型与视图的交互11 。3.1 功能模块设计3.1.1 新闻主模块设计新闻主模块主要包含了浏览新闻功能、收藏新闻功能、分享新闻功能。首先用户进入新闻主界面,选择浏览的新闻种类,点击后进入新闻列表界面,新闻列表界面中中对应了每个新闻标题,可以选择是否收藏,收藏则将该新闻添加到收藏新闻列表,若不收藏则点击标题直接进入新闻详情界面,新闻详情界面可以选择是否分享,若分享则跳转第三方平台完成分享功能,若不选择分享则仅完成新闻阅读,新闻主模块设计流程图,如图3-1所示。3.1.2 用户模块设计用户模块中包含了我的账号、我的收藏、问题反馈以及关于我们,四个小的功能模块完成了用户模块的设计。1.我的账号界面首先选择登录账号的第三方平台,客户端暂时只添加了新浪微博登录支持,选择新浪平台登录之后会判断手机是否有新浪客户端,根据判断结果,若有则跳转新浪客户端进行SSO登录方式登录,若没有则进行网页版OAuth2.0登录方式登录,确认登录后即返回新闻客户端并展现对应的第三方平台的账号信息,登录功能流程图,如图3-2所示。2.进入我的收藏界面后会看到收藏过的新闻内容,新闻以列表形式展现,列表中同样区分图文混排标题以及纯文字标题,与新闻列表不同之处在于取消了收藏按钮,每条新闻标题左滑则会出现删除按钮,可选择是否删除,若删除,则在删除了该条新闻数据后刷新新闻列表,显示修改后的新闻收藏列表,若不删除用户则可以继续阅览,查阅收藏新闻流程图,如图3-3所示。3.反馈信息界面用户首先进入提交反馈界面,提交界面提供了撰写不超过150字的反馈信息的功能,在撰写反馈信息的过程中文本框的右下角会有动态的文字提醒现在已经写了多少字数和还剩多少字数,提交之后即可前往反馈记录界面,反馈记录界面则可向用户展现提交后的反馈记录的处理情况,分为待处理以及已处理,处理结果也展现在该界面,反馈功能流程图,如图3-4所示。图3-1 新闻主模块设计流程图图3-2 登录功能流程图图3-3 查阅收藏新闻流程图图3-4 反馈功能流程图进入关于我们界面可以看到一条滚动文字的学生信息介绍,类似于走马灯的效果循环播放,界面主要部分由致谢语以及联系我们构成,联系我们下方的号码点击即可拨打联系号码。3.1.3 天气查询模块设计进入天气查询界面,输入想查询的城市,系统会判断输入是否正确,若正确则返回对应的天气数据,若错误则提示输入错误,天气查询流程图,如图3-5所示。3.2 数据库分析客户端中使用Core Data框架将收藏新闻的数据、第三方登录的数据和反馈信息的数据保存进本地SQLite数据库中,数据库表主要包含了新闻收藏表、第三方登录表和反馈信息表。图3-5 查询天气流程图3.2.1 新闻收藏表设计新闻收藏表包含四个字段:picUrl为新闻标题图片属性格式为String类型、time为新闻日期属性格式为Date类型、title为新闻标题属性格式为String类型、url则为新闻内容地址属性格式为String类型,具体数据如表1所示:表1 新闻收藏表字段名类型描述picUrlString图片地址timeDate新闻时间titleString新闻标题urlString新闻地址3.2.2 第三方登录信息表设计设计中第三方登录功能使用的是新浪微博登录,新浪微博登录过程中需要保存登录后获取的三项重要信息以及一项本地信息,第三方登录信息表中有四个字段:acces s_token为新浪用户授权的唯一票据,用于调用微博的开放接口,同时也是第三方应用验证微博用户登录的唯一票据,属性类型为String类型;expires_in为access_token的生命周期,即用于判断该授权票据是否过期,若过期则该票据失效,单位是秒数,属性类型为String类型;recordDate为本地时间用于与expires_in判断access_token是否过期,如果过期则需要重新登录属性类型为String类型;uid即授权用户的UID12,为了方便开发者调用接口而返回的属性类型为String类型,具体数据如表2所示:表2 第三方登录信息表字段名类型描述Access_tokenString新浪凭证expires_inDate生命周期recordDateDate本地时间uidString用户独有凭证3.2.3 反馈信息表设计用户反馈因缺少服务器支持所以选择数据本地化处理,以完成功能的实现,反馈信息表包含6个字段名:replycontent为反馈回复内容属性类型为String类型、replytime为回复时间属性类型为String类型、replyuser为回复人员工号属性类型为String类型、requesttime为提交反馈时间格式类型为String类型、text为反馈内容属性类型为String类型、type为反馈记录类型,为1则是已处理,为2则为未处理反馈记录,属性类型为String类型,反馈模块数据库表,如表3所示:表3 反馈信息表字段名类型描述replycontentString回复内容relpytimeDate回复时间replyuserString回复人员requesttimeDate反馈时间textString反馈内容typeString反馈类型4 界面设计与实现4.1 新闻主模块4.1.1 新闻主模块主界面新闻主模块主界面写在subscribeViewController.m 中,为了增加用户体验,使界面整体有滑动的效果所以选择了UIScrollView作为整个界面的容器,内部集成一个重写的子UIScrollview用来做图片轮播器,以及一个UICollectionView作为新闻模块的容器,完成一个九宫格的布局,_mainscrollview即是主视图,主视图中创建了图片轮播滚动视图以及九宫格试图,后面跟的-(void)creatmaincontentsize则是一个改_maincrollview的contentsize大小的方法,供下面九宫格试图建立后再刷新_main crollview的contentsize,新闻主模块主界面图,如图4-1所示。主要代码如下:#pragma mark -搭建主页面- (void)creatnewspageUI _mainscrollview = UIScrollView allocinitWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight);/设置内容大小_mainscrollview.contentSize = CGSizeMake(ScreenWidth, ScreenHeight); self.view addSubview:_mainscrollview; /创建滚动试图和九宫格试图 self creatCollectionView;self creatScrollView;- (void)creatmaincontentsize/根据九宫格大小更改_mainscrollview内容大小mainscrollview.contentSize = CGSizeMake(ScreenWidth , (ScreenWidth /2+ Screen Width /3*_feedbacknum);图4-1 新闻主模块主界面图_cycleScrollView也就是图片轮播试图,采用了本地图片,将五张图片放进一个数组,其中delegate是协议代理,通过定义协议方法,代理对象与协议对象建立代理关系,interfacesubscribeViewController(),中就是这个控制器中使用到的代理,在接口中就要建立代理关系,然后在需要使用的地方将代理对象设置为控制器本身,也就是_sycleScrollView.delegate = self,然后在下面就可以实现定义的协议方法了,例如点击每张图片的触发事件。主要代码:#pragma mark -创建滚动视图- (void)creatScrollView NSArray*tupianAry=UIImage imageNamed:1.png,/将本地图片添加进数组UIImage imageNamed:2.png,UIImage imageNamed:3.png,UIImage imageNamed:4.png,UIImage imageNamed:5.png;_cycleScrollView = SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(0, 0, _mainscrollview. bounds.size.width, _mainscrollview.bounds.size.width/2) imagesGroup: tupianAry; /创建新闻图片轮播器 _cycleScrollView.infiniteLoop = YES; _cycleScrollView.delegate = self; _cycleScrollView.pageControlStyle = SDCycleScrollViewPageContolStyleClassic; _mainscrollview addSubview:_cycleScrollView; _cycleScrollView.autoScrollTimeInterval = 3.0; /自定义时间轮播间隔九宫格新闻模块的创建主要是对于UICollectionView控件的使用,在初始化控件的时候有几个注意的地方,首先要确定UICollectionView的滚动方向,客户端选择的是垂直滚动,控件除了代理需要设置外还需要设置一个dataSource,dataSource是UICollectionView的数据源,UICollectionView中有多少行,每行多少数据都是从dataSource中查询和获取的,数据源的处理对象也是控制器本身。UICollectionView初始化的时候必须对UICollectionViewCell进行注册,给cell注册重用标识符,UICollectionView是容器,而Cell就是容器里面的内容,注册后Cell后才能正常使用UICollectionView控件。主要代码:- (void)creatCollectionView/创建Collectionview _feedbacknum = 4; UICollectionViewFlowLayout *flow=UICollectionViewFlowLayout alloc init; flow setScrollDirection:UICollectionViewScrollDirectionVertical;/初始化并确定大小 _mycollectionview = UICollectionView allocinitWithFrame:CGRectMake(0, _cycleScr ollView.bounds.size.height, _mainscrollview.bounds.size.width, _mainscrollview. bounds.size.width/3*_feedbacknum) collectionViewLayout: flowLayout; _mycollectionview.dataSource=self; /设置代理 _mycollectionview.delegate=self; _mycollectionview setBackgroundColor:UIColor whiteColor; _mycollectionview registerClass:UICollectionViewCell class forCellWithReuseIdentifier:UICollectionViewCell;/注册Cell,必须要有 _mainscrollview addSubview:_mycollectionview; self creatmaincontentsize; /更新_mainscrollview的contentsize大小DataSource为UICollectionView的数据源,Datasource中包含了几个主要方法-(NSInteger)collectionView:(UICollectionView*)collectionViewnumber temsInSe ction:(NSInteger)section该方法主要用来返回每个组有多少个小项目即item,-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView这个方法则表示Collectionview中有多少个组,即section,默认值为1. item值取10,这个关系到设计的可扩展性,后续如果还有更多的新闻接口,即可增加到CollectionView中展示。Delegate是代理协议方法,主要就实现了九宫格界面的视图展示以及触发事件,方法-(UICollectionViewCell *)collectionView:(UICollectionView *)collec tionView cellForItemAtIndexPath:(NSIndexPath *)indexPath中可以对每个cell中的内容进行编译处理,在设计中体现的就是每个新闻模块对应的内容。代理中另一个重要的方法就是点击触发事件方法,即点击每个Item跳转对应的新闻列表,因图形化界面都是在Xcode中自带的StoryBoard故事板中完成,所以先要实体化对象使用的StoryBoard,客户端使用的Main.StoryBoard,然后根据每个控制器的标识符找到需要跳转的控制器,newslistViewController.m是新闻列表控制器,跳转过去时需要传两个值,为了在列表界面判断是哪种类型的新闻,根据传值的不同决定展示哪种类型的新闻列表。4.1.2 各种类新闻列表界面进入新闻列表界面后就根据上一级传过来的数值决定发送哪一个新闻类型的网络请求,请求参数有三个:返回数量num、返回页数page、百度API注册获取的APIKey。httpUrl是API接口地址,采用Get请求向百度服务器提交请求参数,返回数据类型为NSData类型,用方法转换成NSMutableDictionary类型,方便我们下面对数据的处理。主要代码:- (void)getnewslistdata/获取新闻数据if (self.listRow = 0 & self.listTag = 0) self.navigationItem.title = 社会百态; NSString *httpUrl = /txapi/social/social;NSString *httpArg = num=50&page=1; self request: httpUrl withHttpArg: httpArg; -(void)request: (NSString*)httpUrl withHttpArg: (NSString*)HttpArg /请求方法 NSString *Str = NSString allocinitWithFormat: %?%, httpUrl, HttpArg; NSURL *url = NSURL URLWithString: Str; NSMutableURLRequest *request = NSMutableURLRequest allocinitWithURL: urlcachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 10; request setHTTPMethod: GET;/GET请求 request addValue: eb702b37665405ea92316cd1f0483e55 forHTTPHeaderField: apikey;/APIKEY NSURLConnection sendAsynchronousRequest: request queue: NSOperationQueue main QueuecompletionHandler: (NSURLResponse *response, NSData *data, NSError *error)/回调函数;新闻列表界面使用的控件是UITableView该控件使用方法跟UICollectionView相似,也是数据源加代理模式,数据源的数值来自请求方法的回调函数中_newsdic的数量,而代理中-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRow AtIndexPath:(NSIndexPath *)indexPath是代理方法中最复杂的一项,需要考虑到文字标题以及图文标题两种类型的新闻,并且需要对每个Cell中小控件的布局进行处理以及处理屏幕适配的问题,各种类新闻列表界面图,如图4-2所示。纯文字标题中包含了三个控件,标题、时间、以及收藏。为了屏幕适配,在处理小控件的尺寸的时候取得大小都是相对大小,标题内容这边是用的一个高度自适应的Label,根据新闻标题内容长短决定Label的高度,首先设置了label的行数为0,再设置label的linebreakmode为wordwrapping类型,然后使用方法sizeThatFits:新建一个尺寸,作用对象为label,限定了label的长宽的最大值,使label能在这个范围内动态改变宽高,最后让label的高度等于新建尺寸也就是图中size的高度。图4-2 各种类新闻列表界面图主要代码:if (array valueForKey:picUrl isEqual: ) /判断标题是否有图片 _descriptionlab = UILabel allocinitWithFrame:CGRectMake(10, 10, ScreenWidth-20, ScreenWidth*2/9); _descriptionlab.text = array valueForKey:title; _descriptionlab.textColor = UIColor blackColor;_descriptionlab.font = UIFont systemFontOfSize:24; _descriptionlab setNumberOfLines:0; _descriptionlab.lineBreakMode = NSLineBreakByWordWrapping; CGSize size = _descriptionlab sizeThatFits:CGSizeMake(ScreenWidth-20, 400); _descriptionlab.frame = CGRectMake(10, 10, ScreenWidth-20, size.height); cell.contentView addSubview:_descriptionlab;/添加文字标题_timelab = UILabel allocinitWithFrame:CGRectMake(10, 15+_descriptionlab. bounds.size.height, ScreenWidth*2/3, 20);_timelab.text = array valueForKey:ctime; _timelab.textColor = UIColor lightGrayColor; _timelab.font = UIFont systemFontOfSize:14; cell.contentView addSubview:_timelab;/添加时间标题 UIButton * collectionBtn = UIButton buttonWithType:UIButtonTypeCustom; collectionBtn.frame = CGRectMake(ScreenWidth*2/3+10, 15+_descriptionlab.bounds.si ze.height, +ScreenWidth/4, 20); collectionBtn.tag = indexPath.section; collectionBtn setTitle:收藏 forState:UIControlStateNormal; collectionBtn setTitleColor:BTNCOLOR forState:UIControlStateNormal; collectionBtn.titleLabel.font = UIFont systemFontOfSize:14; collectionBtn addTarget:self action:selector(collectnews:) forControlEvents: UICo ntrolEventTouchUpInside;/绑定收藏方法 cell.contentView addSubview:collectionBtn;/添加收藏按钮 _collectnewdic = array mutableCopy;图文标题就要在TableView的每一cell中再集成一个UIImageView控件,主要是用来展示新闻的图片标题,图片内容则是从新闻数据中获取,得到图片的地址后在ImageView中显示。主要代码:-(void)setpicViewUIImageView * picimage = UIImageView allocinitWithFrame:CGRectMake(10, 10, ScreenWidth/3, ScreenWidth/3);/新闻图片标题控件 NSString *imgStr = array valueForKey:picUrl; _collectPicUrl = imgStr; NSURL *imgUrl = NSURL URLWithString:imgStr; picimage sd_setImageWithURL:imgUrl placeholderImage:nil; cell.contentView addSubview:picimage;收藏功能集成在新闻列表中,每一个新闻标题的右下角即收藏按钮,触发事件则是对新闻的收藏,收藏模块主要就是对Core Data的使用,首先需要在建立项目的时候就要勾选使用Core Data,然后再Core Data中建立对应的数据模型,有了数据模型才可以对数据库中的数据进行处理。根据模型的名称字符串找到实体对象,并确定它的托管对象为AppDelegate.h,然后将对应字符串的值存入表中,保存成功则在回调方法中弹出提示框提示收藏成功,新闻收藏功能界面图,如图4-3所示:图4-3 新闻收藏功能界面图主要代码:-(void)collectnews CollectOAtuh * collectnews = NSEntityDescription insertNewObjectFor EntityFNam e: Collect OAtuh inManagedObjectContext:_app.managedObjectContext;NSMutableArray * applear

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论