基于iOS的聊天软件的实现_第1页
基于iOS的聊天软件的实现_第2页
基于iOS的聊天软件的实现_第3页
基于iOS的聊天软件的实现_第4页
基于iOS的聊天软件的实现_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

PAGEi毕业论文题目:基于iOS的聊天软件的实现姓名:学号:指导教师(职称):专业:班级:所在学院:年月基于iOS的聊天软件的实现ImplementationofChatSoftwareBasedoniOS-PAGE52--PAGEIII-目录摘要 IIIAbstract V第一章绪论 11.1聊天软件的背景及意义 11.2开发平台iOS 31.3开发环境Xcode 51.4数据库sqlite3 61.5聊天软件的服务连接 7第二章需求分析 92.1聊天软件的需求分析 92.2聊天软件的功能需求 102.3聊天软件网络连接实现原理 112.4功能模块分析 122.5功能模块的作用 13第三章聊天软件的实现 153.1主界面 153.2登录和注册界面 163.3聊天列表和联系人列表 183.4聊天界面 213.5数据库和自定义方法的封装 263.6个人中心 28第四章聊天软件的测试和发布 314.1聊天软件的测试 314.2iOS软件发布的证书申请 324.3聊天软件的发布 33总结 35致谢 37参考文献 39摘要聊天软件是现今使用众多的软件,在人们交流中扮演着重要的角色,以QQ、微信等聊天软件有着大量的用户,成为无数人重要的交流工具,但是大型聊天软件也存在问题,功能太多,体积太大,很多不需要的功能,还出现推销广告的问题,相比之下小型聊天软件比主流聊天软件要精简,运行快捷,操作简单,设定特定的用户,可以让聊天更加安全。这个聊天软件能够在iOS平台上运行,聊天软件的设计采用的面向对象的设计理念和设计原则,通过面向对象的思想使聊天软件更容易实现。在交互时聊天软件采用服务器和聊天软件客户端的体系结构,聊天软件客户端与其他聊天软件的客户端的通信结构以及聊天软件客户端与服务器端的通信结构之间通过Socket传送消息。聊天软件的主语言是采用了Objective-C,作为开发工具是苹果发布的Xcode。服务器端在运行时,能够使用多线程处理数据,在一个服务器程序当中能够运行多个不同作用的线程,完成没有关联的任务。提高了程序对服务器资源的利用率。经过对聊天软件的分析,以QQ聊天工具为参考对象,完成了具备聊天软件基本功能的软件。它主要使用多种UI控件,调用和封装数据库,根据需求,设计聊天功能,对用户好友进行管理。软件客户端主要具备管理用户的登录系统,聊天联系人,聊天对话界面。软件实现了用户登录,指定聊天用户进行聊天。聊天软件可以完成一对一交流或者多对对的交流,用户可以对好友进行添加,也可以进行删除,新用户可以去注册,用户可以发送消息,也可以接受消息等等功能。关键词:聊天软件;iOS;Socket;登录系统;XcodeAbstractChatsoftwareisnowusedinmanysoftware,inpeople'sexchangeplaysanimportantrole,toQQ,microchannelchatsoftwarehasalargenumberofuserstobecomecountlesspeopleanimportanttoolofcommunication,butlargechatsoftwareisalsoproblematic,toomany,toobiginsize,manydonotneedtofunction,alsoappearedtoselladvertising,comparedwithsmallchatsoftwarethanmainstreamchatsoftwaretostreamline,runfast,simpleoperation,userspecificsettings,youcanletchatmoresecure.ThischatsoftwarecanrunontheiOSplatform,chatsoftwaredesignusingtheobject-orienteddesignconceptanddesignprinciples,throughtheobject-orientedideatomakechatsoftwareeasiertoachieve.Intheinteractivechatsoftwareusesthearchitectureofserverandchatsoftware,client,chatclientsoftwareandotherchatsoftware,clientcommunicationstructureandchatsoftware,clientandservercommunicationstructurebetweensendmessagesthroughsocket.Chatsoftware,themainlanguageistheuseofObjective-C,asthedevelopmenttoolisApplereleasedXcode.Whenrunning,theservercanusemultithreadprocessingdata,inaserverprogramwhichcanrunanumberofdifferentfunctionsofthethread,thecompletionofthetaskisnotrelated.Improvetheutilizationofserverresources.Aftertheanalysisofthechatsoftware,withtheQQchattoolasthereferenceobject,completedthechatsoftwarewiththebasicfunctionsofthesoftware.ItmainlyusesavarietyofUIcontrol,callandpackagedatabase,accordingtotheneeds,designchatfunction,theuser'sfriendstomanage.Thesoftwareclientmainlyhasthemanagementuser'sloginsystem,thechatcontact,thechatdialog.Softwaretoachievetheuserlogin,designatedchatuserstochat.Chatsoftwaretocompletemorethanonetooneexchangeorontoexchanges,userscanaddfriends,youcanalsodelete,newuserscanregister,userscansendamessage,canalsoreceivemessagesandsoon.Keywords:Chatsoftware;iOS;Socket;Loginsystem;Xcode

-PAGE39-第一章绪论1.1聊天软件的背景及意义聊天软件在传播信息,起着至关重要的作用。软件的开发过程与最初的计划保持一致已经不再是当今软件开发的主要目标了[1]。聊天软件可以扩展功能,他涵盖了教育科研,也涵盖文化事业,还包括金融和商业,以及新闻出版、娱乐、体育等各种领域的融合,苹果公司AppStore销售平台上所发布的移动App应用的人机交互界面设计[2]。聊天软件的用户群,十分庞大,所以对于聊天软件,建设安全,而又良好的聊天环境,对于一个复杂的机构,以及对于隐私度较高的团队而言,聊天软件的安全,是十分重要的。聊天软件则作为一种可以去使用户与联系人之间联系的即时交流,聊天软件为此而诞生。聊天软件已经成为人们进行交流沟通,和联系提供的一个交流平台之一。电子阅读和iOS平台智能终端的发展趋势以及MVC设计模式等,随后从性能和功能两方面对手机阅读器的需求进行分析[3]。如图1.1聊天软件所示。图1.1聊天软件开发者通过提供完善的聊天系统的管理,便可以达到增进人们与消费者之间的交流,消费者与消费者之间的交流和联系,这在交际中都十分的重要。基于iOS移动操作系统和H.264视频编码标准[4]。在近些年来,计算机技术和网络技术都在迅猛发展,在计算机网络和互联网的发展尤为突出,计算机和互联网不断的改变了人们的现代生活,在生活的方方面面都有互联网和网络的影子。实现了用户对要求监控区域的实时监控[5],聊天软件正是其中一个启明星。聊天软件可以使得人们能以使用几乎免费的远距离交流,开发者通过对互联网的利用,编写出更实用的应用程序和更方便的网络工具。能够进行语音和语音聊天,基于iOS平台的移动设备上设计并实现一个录音软件系统[6]。服务系统,更是深刻的影响了人们的联系和交流方式,特别是聊天软件,聊天软件可以让相处异地的人进行交流,在任何时候都可以使用聊天软件进行交流。以前的联系方式不适合现今快节奏的人们,过去的交流已经不能满足现代生活的需要,通过使用OS网络编程,及iOS应用程序的发布方法[7]。伴随着全球信息化进程的持续不断发展,智能手机在很多方面已经能够代替计算机处理很多日常应用[8]。发也在飞速发展,这种条件下给了聊天软件一个巨大的空间,人类是群居动物,人们都需要交流,聊天软件则是重要的交流平台,借用手机应用软件来实现随时随地查阅体检结果的方案[9]。大多数人都在使用聊天软件,因为聊天软件的廉价以及即时,非常方便的让用户进行交流,例如老师和学生是使用,时通信是师生沟通交流的重要工具[10]。越来越多的企业需要高效而且快速地处理各种事务,他们在公司内部需要自带的聊天软件来进行安全的工作和交流,而且越来越多的用户隐私信息也都被存储在手机之中[11]。网络的普及下使得各界得以简化信息流程和提高信息交换的速度,从而提高工作效率,让公司和团体内部进行安全的可靠的交流,而且随着开发者的努力,升了系统安全性,一些细节方面也得到了改善[12]。在现今,各种网络企业规模的扩大,网络业务量的增加,而且,GettingthetoolsYourfirstappRunningyourapponadeviceYoursecondappGoingdeeper[13],人们的手机上运行的应用持续不断增多,知识库和网络会议需要储备,数据库应用和数据也要进行同步以及备份,客户在网络上应用对流量的信息吞吐,对服务器会网络处理能力的要求逐渐变大,其中网络主要采用,C/S体系结构,以Socket和多线程技术为核心[14]。部分企业内部自带的局域网设计出现问题,无法满足要求,聊天软件在局域网上运行受到限制,但是在新情况的出现使得局域网不堪重负以及容易发生信息阻塞,妨碍应用的正常工作。为了应对上面的问题,开发者想设想了很多办法,公司对网络的消耗,以对信息的需求,普通的信息交流不能从根本上解决信息交流缓慢的问题。在我仔细学习和研究,我找到了基于套接字的局域网聊天工具的设计与实现方法,使用套接字的局域网聊天软件可以为绝大多数局域网提供一种良好,非常的安全,而且运行速度和反馈快速的聊天机制。。随着发展,使用iPone的人越来越多,人们对手机应用程序的要求也变大,手机出厂时所携带的功能已经无法满足人们的各种需求[15],在苹果公司将iOS开发出手机设备的操作系统。九年前,苹果公司在Macworld大会上,当众公布这个操作系统iOS给自己开发的手机iPhone使用的,进过一段时间的修改完善,这个操作系统随后套用到其他的苹果产品上,随着一个个开发者的努力,这使得这个系统渐渐被完善,现在这些产品越来越受到欢迎。iOS和MacOSX操作系统差不多的起源,他们都是以上述的操作系统为原型,将这个操作系统是以Darwin为基础,做出了类似于Unix的商业操作系统,苹果操作系统它有着非常大的商业价值。随着移动互联网的高速发展,移动设备受到苹果、三星和微软等世界巨头公司的重视[16]。苹果产品在全球市场的iPhone出货量非常庞大,现今有数亿的苹果手机被卖出去,并且使用的用户还在不断增加,在如此庞大的用户面前,iOS的价值越来越大。在进入手机市场5年后,苹果2012年的手机出货量预计将超过1亿部。随着智能终端的高速发展和普及,终端应用的需求呈现出爆发式的增长[17]。苹果公司会提供开发者的预览版更新模式。中国将成为苹果的关键市场,苹果移动终端在整个终端市场有优异表现,而其平台上的应用也凭借合理的布局、简单的操作、人性化的交互,得到了广泛的认可[18]。在广大的用户面前,对手机应用的需求也越来越大,在越来越多的苹果用户出现后,苹果的市场份额仍将快速上升。苹果公司的苹果应用商店是苹果公司提供给软件开发个人以及大型公司出售自己开发能够正常运行的在各种苹果产品上的应用软件的地方。

基于iOS的聊天软件对用户都有着举足轻重的意义,聊天软件是现今使用众多的软件,在人们交流中扮演着重要的角色,成为无数人重要的交流工具,但是大型聊天软件也存在问题,功能太多,体积太大,很多不需要的功能,还出现推销广告的问题,“Mobileplatformdevelopmenthaslatelybecomeatechnologicalwarzonewithextremelydynamicandfluidmovement,especiallyinthesmartphoneandtabletmarketspace[19]”。相比之下小型聊天软件比主流聊天软件要精简,运行快捷,操作简单,设定特定的用户,可以让聊天更加安全,“BuildinganiPhonechatappfromthegroundupJackD.Herrington[20]”。使用Socket的聊天工具是聊天软件重要成员,它充分利用了套接字的信息交流,聊天软件在企业内部聊天,员工进行教学以及讨论等方面,聊天软件应都具有较高的价值。聊天软件具有信息收发速度快,而且通过加密的信息保密性好,信息消耗资源不多,所以占用网络带宽资源低,而且占用服务器吞吐也较少,它具备易于编程实现的优点。

利用套接字的聊天软件应用范围很大,利用互联网的聊天软件既可以处理传统的聊天需求,还可以也拓展功能以适应新型的网络应用,聊天软件拥有着广泛的发展空间和商业价值。即时聊天软件,互联网上的即时聊天软件一般采用UDP协议或者

采用TCP协议体系来实现信息交流

,开发技术已经比较已经完善,像有名的Yahoo以及中国熟悉的QQ,新浪等统统都设计了聊天软件,他们都实现了即时聊天以及文件传输的功能,在实现软件额外功能方面有很多发展空间。聊天软件的发展就是各种利用聊天平台上的网络聊天接口,创建在下层TCP/IP,协议或者UDP/IP协议的软件扩展产品,我们可以理解网络协议以及网络聊天工具的实现原理具研究价值。

1.2开发平台iOS苹果Macworld展览会上公布iOS,随后又发布的iOS操作系统,这使得iOS也越来越完善,它最初由于没有人了解其潜在价值和发展前景,致使没有软件公司和软件开发者给iOS开发软件提供软件支持,这给iOS一定程度的打击,苹果公司CEO说服各大软件公司和开发者,希望他们可以去先制作低成本的iPhone应用程序,再来使得它们能像iPhone的本地化程序一样来测试“iPhonerunsOSX”平台,于是iOS开始慢慢被人们接收,得到支援的iOS开始发展和壮大,在不断的开发和完善,iOS的功能越来越齐全,也能够满足大部分需要的功能。iOS的用户界面能够使用多点触控直接操作,这在手机应用中已经是不可或缺的操作方法,这些操作方法包括滑动屏幕,轻触开关及按键。使用手指进行与系统交互包括滑动、轻按、挤压、及旋转。还可以通过内置的加速器,判断手机所长的状态,可以使其屏幕自由旋转的,这个设计令iPhone更便于使用,旋转功能对看视频和玩部分游戏非常重要,这可以大幅度的改善用户的需求,使手机功能更加强大。屏幕的底部是Dock,在Dock里用户可以放图标,这相当于windows里的快捷方式,用户可以将最经常使用的程序的图标放在Dock上,这样就可以快捷的使用程序,而且屏幕上不需要图标,看看有让屏幕看起来美观。屏幕上方有状态栏,能显示一些有关数据,程序的各种功能和设置都在这里进行操作,可以快捷的进行设置软件的操作。其余的屏幕用于显示当前的应用程序,大面积的展示可以更好的利用屏幕的空间。在用户去启动iPhone应用程序时,使用的方法就是在当前屏幕上点击该程序的图标,点击后就能够进入软件,使用方便,当用户想要退出程序时,只需要按下屏幕下方的HomeiPad,将五指捏合手势,这样就可以回到主屏幕键,操作简单,不需要太多的动作,给用户提供相当的便利。当第三方软件收到了新的信息时,Apple的服务器将把这些通知推送至iPhone、iPad或iPodTouch上,这样就不会随便骚扰到用户,但也不会错过信息,在得到信息后不管它是否正在运行中在通知中心将这些通知汇总在一起,如果用户觉得不需要时,通过设置可以隐藏该功能,这样就不需要担心软件的骚扰。许多应用程序之间在iPhone上无法直接调用对方的资源,给用户更加安全的环境,同时也让人家之间的交互变得困难。当打开Xcode时,选择新建工程,在工程里可以创建各种iOS的模板,如图1.2iOS应用程序创建所示,里面有系统已给出的模板。图1.2iOS应用程序创建1.3开发环境XcodeXcode

是苹果公司开发的编程软件,它是免费的,让新学者可以轻松的去学习,Xcode方便开发者的使用,开发人员建立OSX和

iOS

应用程序最快捷的方式,使用起来相当的便利,Xcode具备统一的用户UI设计,开发者的编码操作、测试操作以及调试操作都可以在一个不复杂的窗口内完成,不需要进行添加其他的插件或者配置环境,没有Java的复杂它在Mac操作系统下,苹果公司设计的Xcode向开发人员,它提供的集成开发环境,能够开发MacOSX,iOS的应用程序。在使用AppleScript里编写脚本,Xcode能够转移编码,C、C++、Objective-C或Java编写程序在Xcode的编译速度极快,并且在编译时每次操作都很快速。Xcode具备着虚拟模型和设计功能,Xcode能够让程序员可以更轻松的开发以及维护应用程序,给开发者带来了很大的便利,让编码变得更加容易,当开发者选择应用程序中想要编写的部分,模型和设计系统,Xcode将会自动去创建分类图表并且会显示编码,让开发者进行浏览,开发者可以使用MacOSXCoreDataAPI为应用程序创建数据结构,处理数据结构,而且开发者不需要编写任何编码,因为Xcode具备自动提供撤消、重做和保存的功能,给开发者提供便利的同时,也减少了损失。现如今Xcode所使用的编译器是前端是clang的LLVM编译器,Xcode的核心部分是苹果开发的业界标准,使用Xcode可以提供很多便利的功能,而且它采用了先进的技术,在LLVM编译器,它就利用许多先进的最优化技术,甚至使用了超级计算机的处理方式,它可以帮开发者去从现存编码中获得更多性能,使用自动向量化技术就是来自超级计算机的技术,开发者不需要编写向量化编码就能释放系统中速度引擎的能量,大幅度提升编译的效率和减速开发者的工作量。在MacOSX综合开发环境下,Xcode为软件项目提供编辑功能,也提供了浏览和搜索的功能,开发者可以进行文件编译和项目构建,也可以进行调试设备,为开发者提供便利,这些功能不需要使用插件和其他方式就可以使用。而且Xcode还拥有在线编码汇编,让使用变得方便,降低从CodeWarrior到Xcode转变的消耗,开发人员可以通过采用手动方式去调整应用程序的临界性能部分,让编译可以变得更加容易,Xcode可用来开发iOS等应用程序,它是一个重要的工具,为软件形成架构,并且提供存储用的数据库,还能够添加嵌入包,Xcode还进行核心扩展,还可以启动设备驱动程序。Xcode支持开发人员使用多种语言,可以使用C、C++、ObjectiveC、AppleScript和Java。调试全屏幕应用程序具有风险,正在风险并不严重,Xcode的绘图远程调试功能,它可以让测试员在远程机器上用来调试应用程序,Xcode会提供远程调试阶段的加密连接,可以保证数据的安全,进行远程调试。如图2.3为Xcode首页,可以进行创建新工程或打开已创建的工程。图1.3Xcode首页1.4数据库sqlite3SQLite是一个开源的嵌入式关系数据库,不仅不需要钱,而且不占内存,不需要账号和密码,完全为软件自己服务,它的减少应用程序管理数据的开销,提供程序的效率,SQLite可移植性好,很容易使用,而且体积很小,并且高效而且可靠。SQlite3不用安装,不用配置,不用启动,关闭或者配置数据库实例,这让新手也可以轻松的使用,SQLite的源码达到完全的分支测试覆盖率,让数据操作正确而且有效。Sqlite数据库将会自动再下次使用数据库的时候恢复,开发者不需要提供对数据库的操作。在sqlite3在运行Mac

OS

X等系统上,它也可以工作在许多嵌入式操作系统下。SQLite是被是轻量级的数据库。Sqlite包含一个头文件和一个lib库,有了这两个文件Xcode就可以使用关系数据库,用于是嵌入式,它需要启动系统的如何进程,也不需要造成额外的大量开销。在商业应用程序出现以来,数据库就是软件应用程序密不可分的一部分。对数据库管理也变得非常重要,所以现在的数据库也变得非常庞大,这些数据库并占用了相当多的系统资源,而且还会增加对数据库管理的复杂性。在软件应用程序渐渐变得模块模块化,简单而又精巧的sqlite会比大型的数据库管理系统更适应开发者。SQLite数据库是嵌入式的,它可以嵌入到应用程序进程中运行,应用软件不需要任何配置就可以运行,并且资源占用非常少。

SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间。它并不像一个RDBMS,它在进程内部却是完整的,并且自包含的数据库引擎。

一个对SQLite数据库的好处是,开发者不需要在网络配置和管理程序操作。客户端和服务器可以在同一个进程中运行。数据库权限的SQLite只和文件系统相关,它是没有用户帐户这个概念的,加锁的数据库,无需网络服务器。它需要的是内存,开销很小,是适合于嵌入式设备的。程序员简单地把它放在程序中。改进的并发性,锁定子系统引入锁升级模式,解决了问题的写作过程中的饥饿,确保编写过程中,按照第一个先来服务算法获得独家锁定,通过结果的过程是临时缓冲区,可以得到一个锁在您可以开始工作,为写要求苛刻的应用,数据库的性能可以提高四倍。对于表使用的B+树,大大提高了查询效率。1.5聊天软件的服务连接TCP协议,是网络通信的基石,没有这个协议,就不能完成网络通信,因此苹果公司,专门为Objective-C提供了Socket的类库,方便开发者使用套接字,来进行网络连接,网络连接,可以抽象出TCP协议通信的常用方法,

T那就是CP协议,与三次握手。了解TCP协议流程前,我们需要先来对TCP进行声明,需要理解TCP的两个概念,聊天软件的客户端,它用于TCP请求的发送的客户端,客户端的作用是聊天软件的服务的请求者,用户通过客户端,进行发送消息,以及接收消息,通过使用TCP请求,将信息发送到服务器,从服务器下载联系人的消息,以完成通信的功能,它是一个不确定的地址,在登录时,将这个地址发送给客户端,使其可以找到客户端的ip地址,即能够完成通信。

聊天软件的服务器,在接收到客户端的请求,在之后,服务器会向客户端,提供对应的服务,比如,下载联系人的列表,下载到聊天记录,下载自己的个人信息,返回客户端,应该所处的状态,以及处理用户发送的信息,必要时需要进行重新排序。服务器一般是服务的执行者,会向客户端返回服务执行的结果,相当于中介,来完成两个或多个客户的交互。一旦网络是最基本的目的,就是让机器连接在一起,并传递信息给对方或单向传输信息。一旦两家电脑或通讯设备发现了对方可以展开双向对话。但问题是他们怎么能找到对方的位置?这就像一个故事说:一台机器必须留在一个地方,然后听其他机器,寻找其他机器。

只能留在一个地方,机器被称为服务器或服务器,它可以处理其他机器,如他们的位置,他们的状态,他们是活动;正在寻找的机器,称为客户或客户或客户的家庭。区分这些机器,只在客户端尝试连接服务器,很清楚,但一旦连接,就变成了一个双向沟通,谁是服务器,或者谁是客户端,是不是那么重要,连接到网络上,双方的地位几乎,但是在聊天软件,服务器,数据存储,然后送到目标站点。所以服务器的主要工作是倾听,并要求建立一个网络连接,这是由开发人员创建的,要完成特定的服务器对象、聊天软件、服务器的数据处理,然后发送到客户端。客户端的任务是尝试与服务器建立一个网络连接,这是由开发人员创建的,具体的客户端对象完成的。一旦连接被建立,那么无论是在服务器端还是客户端,连接就成了一个输入输出数据流的对象,然后,我们可以读写一个共同的文件,处理连接。所以一旦建立了连接,开发者只需使用自己熟悉的输入输出命令,就可以完成所需的工作。本章主要讲述了,在聊天软件开发过程中,关于iOS开发所需的各种条件和背景,即为什么要去开发聊天软件,因为聊天软件可以方便我们的交流,更加容易的拉进人与人之间的关系,如果通过iOS开发出的聊天软件可以交流,那将会大大增加用户之间的交流,让用户之间的交流变得容易。开发iOS并不是件容易事,所以需要开发者掌握iOS的开发语言,Objective-C,面向对象C语言,以面向对象的思想开发应用程序,比C++简单,使用起来相当方便,我喜欢使用Objective-C,不过苹果公司推出了swift语言,Objective-C可能一段时间后会被swift所替代,更好的语言替代陈旧的语言,这让开发者需要不断的消息知识,更加深刻的理解新出现的语言。开发iOS是在MacOS操作系统中完成的,这种系统使用了沙盒模式,这给开发软件带来了一些麻烦,但是并不影响开发者去完成任务,通过特定的方法可以获取到文件所在的位置,这样就可以使用位置地点的文件,对于其他程序的情况并不了解,因此,同一个手机里的两个应用程序无法像Android一样方便调用彼此的信息。Xcode这种工具非常强大,不仅运行速度快,而且支持swift,oc,而且还支持java,c,c++的开发,Xcode是一个非常好,但是又是一个免费的软件,给喜欢的开发者一个相当低的入门机会。Xcode有着嵌入式的数据库sqlite3,这种数据库不需要用户名和密码,虽然安全性降低,但是可以通过方法对其封装来保护信息,小巧的体积以及出色的查找努力,让开发者相当喜爱,我很喜欢这个数据库。在开发聊天软件,TCP协议是数据传输的重要组成部分,开发者需要去掌握TCP的使用方法,也许对于开发者而言不需要具体的实现步骤,但是至少需要掌握如何去使用它。

第二章需求分析2.1聊天软件的需求分析根据手机功能使用调查显示,大部分的消费者都会使用手机聊天软件,例如使用微信,QQ等,QQ是目前使用最广泛的聊天软件之一。随着聊天功能的不断加强和完善,聊天软件对于人们的意义,已不仅仅像一般的手机通讯软件,而是向着更加个性化,个性化的方向发展。多家公司推出的免费的基于Internet的即时聊天软件(IM)。用户可以通过使用聊天软件同远处的好友进行即时的交流,还可以发送信息和自定义图片或相片,功能非常全面。聊天软件是中国使用量最大、用户最多的的面向个人的软件之一。本次课程设计基于IOS的聊天软件的实现,我们做了一个简单的聊天工具,此聊天软件主要侧重于图片的信息的发送后接收等基本操作。聊天软件在几乎忽略传输时间延迟的情况下将信息发送与接收,在发送人发送出信息的同时接受者接收到信息。它不会像电子邮件那样存在较长的延迟,减少因时间的耽误而引起的损失,增加聊天的效率。聊天软件直接将人们联系起来,让人们通过客户端直接交互信息。使得用户在网络上的沟通变得容易、更容易共享和交互信息,聊天软件可以直接连接到其他用户的计算机、交换文件。在开发聊天软件时,需要去考虑这个软件是否可以实现,首先需要去考虑开发的成本,从经济上分析:我的聊天软件是不要考虑商业情况,所以不需要关心经济效应,虽然设置了可以添加其他功能的接口,以及几个小功能,但是我的聊天软件重点是软件本身的水平和能力,做的更加漂亮以及运行正常,开发这需要一台可以运行Mac系统的机器,使用windows进行虚拟,并没有消耗多少资金,从经济上考虑,开发聊天软件完全不成问题。

除了经济的考虑,技术方便也不可或缺,如果没有相应的技术,也可以使软件故障:本系统使用sqlite3数据库开发系统,它可以支持新的多用户数据库,适用于对数据的需求规模小,作为一个聊天软件的实验服务器不够,如果你想发展商业,你可能需要更换更强大的服务器。新的系统服务器/客户端架构为校园网的建设提供硬件支持,可以使用校园服务器作为自己的服务器,因此可以使用另一个服务器来进行服务器的设计。使用Xcode开发环境,为开发系统,它不仅提供了完整的命令控制语句、类与对象的支持及丰富的数据类型,还提供安全开发高性能的系统,开发者开发的聊天软件,满足客户的要求,保证了代码的模块化要求,而代码模块化的提高,对新系统的扩展与修改的未来非常有利。即使开发成功的操作是一个问题,说的理想是全面的,现实是非常瘦小,操作上的可行性是我聊天软件作为一个小的聊天软件,它的成本是非常小的,甚至与使用的计算机一般,无论是硬件或软件的要求都能够满足条件。因此,该系统在操作上是可行的。从这个角度来看,系统的设计和开发在技术和硬件设备方面都是满意的,聊天软件的开发是可行的。2.2聊天软件的功能需求登录功能,打开软件,自动跳转到登录界面。实现登录需要有登录的网站,知道网站的域名或者固定IP地址,用于使用套接字连接数据,使用户和网站的服务器形成连接,方便之后信息的交互。当用户输入的账号在系统中不存在,就提示注册,若用户输入的账号已存在,则进行账号与密码的验证;当密码正确使登录成功,密码不正确使提示,密码错误。登录需要一个输入账号的输入框,一个输入密码的输入框并对密码的输入框设置信息隐藏,防止密码泄露,然后需要两个按钮,一个注册用的按钮,使用户可以去注册自己的账号,另一个按钮是登录按钮,发送用户输入的密码,当在网站验证通过后,返回一个加密的信息,提示软件密码正确与否,密码正确后释放自己的视图控制器,返回到主界面。注册功能,注册成功后释放注册视图,返回登录界面。实现注册需要有注册的网站,一般采用和登录相同的网站。在知道网站的域名或固定IP后才能进行注册,在确保网络无误之后,才能进行交互。首先需要用于输入账号的输入框,可以让用户自定义账号,但用户名已存在时会提示用户名已存在,要求用户修改账号。然后两个用于输入密码的隐藏文本的输入框,用于输入密码,当两个输入框不完全相同时会提示出错,这样可以防止用户输错密码,导致注册的账号无法使用。然后要一个显示用户昵称的输入框,让用户可以自定义喜欢的名字,作为网络上的名字,然后还有其他输入框,用于输入非必须的信息,例如联系方式等。和登录一样创建两个按钮,一个注册按钮,用于发送输入的信息到网站,在确认账号信息可以注册时,信息储存在数据库,同时向客户端显示注册成功,自动释放注册的视图控制器,放回到登录界面,使用户可以登录自己的账号。主界面,显示聊天列表,点击后进入聊天界面。主界面是用户登录后显示的第一个界面,聊天软件重要的组成,界面分为三个部分,至上而下,第一个界面用于设置按钮,显示用户的昵称的UILabel;第二部分是重要的视图,用于显示聊天记录的聊天人的列表,方便用户快捷的再次连接连接过的聊天对象,方便用户快速的聊天。聊天列表使用UITableView,将每个聊天记录的聊天人信息放入UITableViewCell里,当点击cell使连接网络,使聊天可以再次开启。最下面则是UITabbar形成的快捷跳转工具,能够快速进行界面跳转。联系人列表,添加用户和删除用户。联系人界面,主要放置用户拥有的联系人,对联系人进行添加或者删除。采用UITableView放置联系人的信息,主要包含联系人的昵称,账号和头像。将从服务器下载的联系人数据放入UITableViewCell里,在界面上显示出联系人的基本信息,方便用户了解联系人的情况。设置输入框用于查询用户账号,可以通过账号将其他用户添加到联系人之列,在服务器当前用户的联系人信息中添加一个联系人。拓展界面,个人中心,进行个人设置,对聊天软件进行设置。该界面用于对聊天软件功能扩展。用户协议是本软件的一些帐号信息,隐私协议,使用规则,法律相关等问题,帮助信息是用户可能对一些功能和要求进行解释说明。

修改个人信息(昵称,头像,密码。注销当前用户,方便用户清空自己的数据和账户切换。

对于推送来说,注销也意味着,同时需要对把服务器和这个帐号所登录的设备进行解绑,如果仅仅清空了本地的数据,那么很有可能会在注销以后还能接收到之前被注销过的帐号的推送。聊天界面,连接网络,更新信息。当点击聊天列表或者联系人列表的成员的UITableViewCell时,修改一个存储数据的单例类,将当前联系人的信息输入到单例类里。页面跳转到聊天界面,聊天界面分为三个部分,用于显示联系人信息的界面以及退出的视图,然后是用于显示聊天信息的UITableView,当用户发送一个数据或者接收到一个信息时,在UITableViewCell里显示出聊天的内容和时间,最下面时输入聊天的UITextView,设置按钮来处理信息,将UITextView里的数据发送到服务器,插入一个UITableViewCell,显示发送的信息,然后将输入框的数据使用@””将数据清零。2.3聊天软件网络连接实现原理

聊天系统是针对常见的网站设计中的很多不同部分的设计和一般的网站设计的考虑,例如,一般的网站需要进行布局,大量的美化和动画设计等等,并且只要它符合来访的直接实时聊天室。因此,在设计一个聊天系统的过程中,我们必须考虑以下几点:设计。网络连接,为了能够实现客户端和服务器端的通信,客户端首先需要发送,“SYN”的数据包。当聊天软件的服务器收到SYN标记,服务器将发送一个“SYN+ACK”网络数据包。第二步,客户端接收到的数据包时,代表客户,收到了SYN+ACK信息,客户端会向服务器发送一个信息,最后确认,这是ACK包。在同网络连接,SYN/ACK包。确认步骤,称为TCP连接建立时的“三次握手”,这三次握手完成后,确定网络连接,正常情况下,这种连接将保持活动状态,直到超过规定时间或任何一方发出的信号端连接网络。这种通信方式被称为客户机/服务器模式,在网络通信中有广泛的应用。

在客户机/服务器模式的具体步骤,在ACK=1第一次握手,客户端向服务器发送一个连接请求,建议,和服务器连接到网络;第二握手,服务器向客户端发送请求,返回给服务器发送一个确认,同时向服务器发送一个连接请求。第三次握手,客户端接收由服务器发送到客户端的数据发送一个确认连接SYN=1,=1=ACKSEQ,SYN=1,SEQ=1。通过客户端和服务器的“三握手”网络连接,双方可以建立畅通的沟通渠道,在这个渠道中,双方要传送数据,完成聊天软件,必须进行沟通的条件。在互联网聊天程序中,一般都可以通过服务器连接到服务器的响应,用户登录通过客户端到服务器,可以在同一个服务器上登录和用户,这是一个面向连接的通信程序。因此,程序应该在TCP/IP网络环境下,实现服务器和客户端程序两部分。网络连接实现原理图如图3.1。Client客户端Server服务器Client客户端Server服务器建立服务器监听Socket建立服务器监听Socket建立聊天网络连接创建连接Socket,向服务器端发送请求创建连接Socket,向服务器端发送请求等待网络连接并接收网络请求接收网络请求后创建Socket连接结束通信开始通信接收信息InPutS接收信息InPutS发送消息OutPutS发送信息OutPutS关闭Socket关闭Socket等待网络连接并接收网络请求接收网络请求后创建Socket连接结束通信开始通信接收信息InPutS接收信息InPutS发送消息OutPutS发送信息OutPutS关闭Socket关闭Socket图2.1网络连接实现原理图2.4功能模块分析聊天系统主要分为两个部分,一个是聊天软件的客服端,另一个是聊天软件的服务器端,其中客户端拥有以下功能:第一是具备时钟功能,可以记录聊天信息发布的时间,这可以在聊天软件信息排列时,使信息让时间先后顺序依次排列;第二功能是用户端注册和登录系统,用户注册账号、密码、昵称和头像等用户的信息,这可以使用户可以精确的确认自己的身份,使信息正确的发布给指定的用户,增加信息的安全性,同时也可以让信息交流变得容易。第三功能,聊天功能,这是聊天软件的核心组成,聊天分为单人聊天和多人聊天,单人聊天可以一对一进行聊天,功能相对安全,同时也相对简单,但是某些时候需要多人聊天,因此多人聊天也很重要。第四功能是设置,对聊天背景的设置,对字体大小的设置等。AppDelegate为客户端程序启动类,负责客户端的启动和退出。

LoginViewController为聊天软件的登录界面,它展示用户帐号信息的验证,以及反馈登录结果。

RegisterViewController

是聊天软件的注册界面,它是展示登记帐号信息的注册,以注册结果的反馈。ChatViewController聊天软件的聊天室主界面,它展示和接收,以及去发送聊天内容,同时与服务器端的ChatLink亲密合作。

chatLink自定义的类,他们负责封装聊天软件需要的方法,还可以去获得聊天室的信息,当用户退出时返回给聊天软件的服务器发送消息。创建一个客户端程序的一个小程序,实现的一个获取时间的功能,记录和控制时间,为信息做标记。另一个就是服务器端,作为服务器第一个功能就是保存用户端信息,第二功能是服务器可以监控聊天的内容,一旦有新消息,就会对全部用户发送聊天记录更新;第三功能就是服务器发送通知,比如服务器什么时候关闭,什么时候开启,可以提前发布给用户;第四功能,保存聊天信息,让用户可以接受到离线时的信息,反之遗漏信息;第五功能,保存服务器日志,但出现错误时可以恢复。

ServeController为服务器端程序界面和为服务器的启动提供界面服务.viewController则是聊天软件的启动界面控制器,它可以获得和显示服务器的状态,获得当前用户的状态,当前服务器在线情况,服务器当前的IP地址,服务器端口号以及用户信息的管理,日志的保存等功能。(1)聊天软件客户端模块

本字系统主要完成对用户聊天的管理,如进行群聊,进行悄悄话式的聊天,修改字体颜色,以及对头像的选择等。进行群聊:首先登录客户端系统,选择聊天对象,然后在发送信息的窗口编辑信息,点击发送按钮即可发送公开信息。

进行悄悄话式的聊天:当对密友聊天时不想让别人看到,可使用悄悄话的方式进行聊天。

选择头像:便于区分该用户是男性还是女性,用于显示用户的个性。

显示系统公告:让用户及时了解系统发布的最新消息。

修改字体颜色:为了使聊天的内容易于区分,系统为用户提供了修改字体和颜色的功能

⑦存聊天记录:记录用户聊天的内容,以便用到时能够查到。

文件传输:当用户发送大量信息,可以通过发送文件实现。

(2)服务器端模块

配置服务器:客户端需要提供服务器IP和端口号或者得到服务器的域名,便于客户端进行连接。

设置系统公告:让用户了解一些新鲜事,系统的状况,用户近期要注意的事情等,系统提供了设置系统公告的功能,以便能及时发布信息。

记录聊天记录:以便管理员了解用户的情况。统计在线人数:使管理员能够随时了解系统的负荷,便于对系统进行维护。2.5功能模块的作用1.聊天软件登录模块:

输入:用户输入账号,用户输入密码。输出:登录成功,跳转至主界面;登录出错,显示错误原因。2.聊天界面发送模块:

输入:用户输入内容在聊天输入框,输入完成后点击发送。输出:在UITableView中添加一条消息,显示发送的信息。

3.联系人列表模块:

输入:用户输入的登录信息

,从服务器下载联系人的消息并显示在联系人列表里。输出:显示相应联系人的信息,如昵称,头像,在线与否,个性签名。4.聊天

系统操作模块:

输入:用户发送指令,对系统进行操作。

输出:根据指令,做出对应的结果,出错时进行提示错误可能的原因。

5.聊天系统设置模块:

输入:用户的输入设置,使用UITextField来输入文本,使用选择来获取枚举类型的数据,多系统进行设置。

输出:根据用户的输入内容,可以显示相应的界面,对界面进行修改。6.客户端和服务器模块:理解需求是这个问题,然后到最后的解决方案,第一步是桥接客户端和服务器之间的连接。开发商和客户的充分交流,并可以得到的需求,在系统设计开始前。如果要求定义没有做任何改进,开发设计必须进行巨大的重做。以下是双方的调查,最终需求规格:

(1)

聊天软件为客户提供聊天功能:用户可以先通过登录界面进入聊天室,只需要输入主机的IP、端口号和昵称就可以聊天了。

(2)

聊天软件为客户提供讲悄悄话功能:用户可以在聊天窗口中点击用户头像的单选按钮。(3)

在聊天软件中,界面显示:将在线好友显示在好友列表中;。

(4)

聊天软件为客户提供改变字体颜色和样式。(5)

在聊天软件中,可以显示登陆用户的头像和昵称。(6)在聊天软件中,服务器端实现监听功能:监听所有本地连接到服务器上的客户端。

(7)

在聊天软件中,服务器端向各个客户端发布信息,如系统消息和公告。(8)

在聊天软件中,服务器端接受来自客户端的各种信息,服务器还需要将这些信息分别处理,然后做出对应的操作。

(9)

在聊天软件中,需要检查登陆信息是否正确,登录正确后,服务器需要向客户端返回登陆信息,在确认信息正确后,服务器就将用户以及信息发给该用户,并将用户的在线状态发给所有的在线的用户。并且在服务器端和客户端也应该去显示出来;

聊天系统的客户端在iOS平台下运行,服务器端可在MacOS平台下运行。系统需要有较好的安全性和可扩展性,并提供简洁方便的图形用户界面。

第三章聊天软件的实现3.1主界面1、创建UITabbar。在AppDelegate.h中添加代码,将chatViewController,userViewController,addViewController三个视图控制器放置到根视图,并设置在UITabbar上的标签,解释各视图控制器的意义。初始化三个视图控制器,分别用于显示聊天列表的chatViewController,显示联系人列表的userViewController,扩展聊天软件功能,暂无用处的addViewController。先需要将视图控制器进行初始化,并使用“vc0.title=@"消息";”对视图的标题名设置,方便客户理解当前界面的意义。使用一个数组存放视图控制器的信息,用于批处理视图控制器。定义一个UITabBarController,将存放视图控制器信息的数组添加到UITabBarcontroller,在将它放到根视图上,核心代码如下:chatViewController*vc0=[[chatViewControlleralloc]init];vc0.title=@"消息";userViewController*vc1=[[userViewControlleralloc]init];vc1.title=@"联系人";addViewController*vc2=[[addViewControlleralloc]init];vc2.title=@"扩展";NSArray*controllers=[NSArrayarrayWithObjects:vc0,vc1,vc2,nil];UITabBarController*tabController=[[UITabBarControlleralloc]init];tabController.viewControllers=controllers;self.window.rootViewController=tabController;2、初始跳转至登录界面。视图跳转在iOS软件里还是很重要的组成部分,通过使用函数完成跳转。添加将要跳转的视图控制器的头文件,在需要跳转的代码出对该视图控制器初始化一个视图控制器变量,在使用跳转的方法实现功能。selfpresentViewController:vcanimated:YEScompletion:^{},第一个参数填入目标视图控制器,即初始化的控制器变量,第二个参数确认是否使用动画效果,NO表示不使用动画,YES则是使用动画,在大括号内可以对动画进行设置,还可以添加其他功能以及跳转前的预处理,比如存储和修改数据等。实现代码如下:ViewController*vc=[ViewControlleralloc];[selfpresentViewController:vcanimated:YEScompletion:^{}]; 最终得到主界面,能够显示用户需要使用的三个主视图,一个是用于显示聊天人的所有信息列表,一个是显示自己的所有联系人,并在UITableViewCell里显示出来,最后是用于显示个人设置的用户的个人中心,如图3.1所示。图3.1主界面的聊天记录列表3.2登录和注册界面1、设置输入框,使用UITextField。设置输入框可以使用storyboard或者使用自定义创建,它用于输入文字等,使用storyboard时,将控件拖拽至目标位置,然后将Ctrl+鼠标左键进行连线,设置UITextField的信息,在interface里放入控件的信息,storyboard可以方便的去创建控件,在创建后也可以使用代码对其属性进行重新定义,使用自定义创建UITextField时,需要对其先进行初始化,为了使用方便,可以将控件设置为全局指针变量。通过方法对控件的属性进行赋值,例如设置背景颜色,控件的大小,放置的视图的位置等。获取输入框信息使用文本框里的文本信息,可以使用:idText.text。来实现获取输入框内的信息,对输入框信息的获取,以核对输入的账号是否存在,密码是否正确。在loginViewController里会得到如下代码,用于调用storyboard,代码实例如下:@property(weak,nonatomic)IBOutletUITextField*idText;2、设置按钮,使用UIButton。在登录和注册界面,都需要按钮来发起确认命令,在按钮里设置方法来完成后续任务。UIButton的使用同样需要进行定义和初始化,然后需要对其进行大小控制,根据所在视图的层次,使用下列代码第2行来设置UIButton的大小。然后为了看到按钮,需要给按钮一个颜色,以找到按钮所在的位置,使用下列代码第三行给按钮控件定义颜色。然后使用按钮需要有一个调用的方法,可以使用下列代码第4行来实现,其中第一个是按钮的名字,第二个指定按钮所在的位置,在本视图控制器里使用self,然后使用@selector(myClick)相应事件,其中myClick是执行按钮操作的方法,最后是如何启动按钮,使用UIControlEventTouchUpInside代表着按钮被按下,再弹起来时调用myClick这个方法。UIButton*myBtn=[UIButtonbuttonWithType:UIButtonTypeCustom];myBtn.frame=CGRectMake(280,0,40,40);myBtn.backgroundColor=[UIColorredColor];[myBtnaddTarget:selfaction:@selector(myClick)forControlEvents:UIControlEventTouchUpInside];[_loginViewaddSubview:myBtn];3、登录按钮启动后的操作,需要确定密码和账号是否正确,使用_passwordText.text获得输入框里的密码,_idText.text获取输入框的账号,将账号发送到服务器,服务器会查询账号和密码,是否匹配,匹配成功着给客户端返回一个代码,作为匹配通过,将账号的信息反馈给用户,例如用户的昵称,头像,联系人的信息。当匹配失败时,返回一个错误,“账号不存在”,“密码错误”,根据反馈,使用UILabel提示用户输入的账号不存在或者密码错误。在注册时情况和登录有些类似和差异。注册除了使用输入框输入用户希望的账号和密码,还需要给用户一个相当于名字的昵称,以及设置一个头像。将输入框的文本发送到服务器,通过验证,符合要求就会在服务器里备份,同时返回一个信息,如果失败则返回“当前账号已存在”等信息,对于密码为了防止密码输入时,用户意外出错,注册密码时会有两个密码输入框,当两个输入框的密码不一致时,在界面上一个隐藏的UILabel会显示一行文字“前后密码输入不一致”,代码如下:在完成所有工作,同时输入信息正确时,执行以下代码,释放当前界面的视图控制器,放回到登录视图控制器。图3.2登录界面部分截图“_passwordErrorLabel.text=@"前后密码不相同!";[UIViewanimateWithDuration:0.0delay:3.0options:UIViewAnimationOptionAllowUserInteractionanimations:^{}completion:^(BOOLfinished){_passwordErrorLabel.text=@"";}];}”最终得到用于进行登录的界面如图3.2以及用于注册账户的注册见面,如图3.3所示,用户可以通过登陆界面登录聊天软件,通过注册界面的操作成为一个用户。图3.3注册界面部分截图3.3聊天列表和联系人列表1、创建UITableView,这是一个相当复杂的控件,最困难的莫过于创建UITableViewCell,先定义一个UITableView的名字,初始化UITableView,设置UITableView大小,如下列代码第一行所示,使用界面的尺寸计算可以减少工作量,同时增加软件在不同尺寸手机上的运行效果。可以为UITableViewCell设置一个颜色,使用方法下列代码第二行,为UITableView设置一个灰色的背景颜色,用来和背景的白色区分。当使用UITableView使,免不了使用数据的批量处理,在使用时需要定义,在接口添加方法名,用于引用数据,在userViewController的接口里添加两个属性UITableViewDataSource和UITableViewDelegate,他们用于对数据资源的处理后对视图的控制起着至关重要的作用,在主视图控制器superviewDidLoad下面需要添加对他们的初始化赋值,如下列代码第3和第4所示。将UITableView视图放到当前视图控制器上的一个视图_myView上,如下列代码第5行所示,在联系人列表中,联系人的cell统一高度更加美观,使用方法来设置UITableViewCell的高度,将cell的高度设置为60,根据情况可以对数值进行加减,如下列代码第6行所示。_zmTableView=[[UITableViewalloc]initWithFrame:CGRectMake(0,0,_myView.frame.size.width,_myView.frame.size.height-20)];_zmTableView.backgroundColor=[UIColorgrayColor];_zmTableView.dataSource=self;_zmTableView.delegate=self;[_myViewaddSubview:_zmTableView];_zmTableView.rowHeight=60;设置UITableViewCell拥有多少个,先要根据联系人数据获得联系人有多少个,达到数据存储到number.count,将使用方法“”,将会为联系人开辟出number.count个UITableViewCell。这是专门设置UITableViewCell的方法,如下列代码所示。-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{returnnumber.count;}2、对UITableViewCell的设置。在控件中UITableView最为复杂的控件,需要多个方法进行设置,逻辑关系较多,其中最重要的莫过于UItableViewCell,每个cell将显示一个联系人的信息,联系人的昵称,联系人的id,联系人的头像。联系人的个性签名,联系人的在线情况或已离线时间。用于cell可能有很多,如果全部定义cell将会造成巨大的内存开销,比如联系人有100个则需要创建100个cell,这样浪费资源。因此需要使用cell的复用来减少内存的消耗。首先需要定义一个cell,“UITableViewCell*zmCell;”,然后使用方法将cell进行标记,行数存储在NSIndexPath变量indexPath里,然后将cell进行赋值,如下列代码第1行所示。然后将zmCell标记一个循环用的标记,标记方法是通过下列代码第3行设置标记的样式,然后通过下列代码第4行判断zmCell是否进入可以循环的状态,然后在条件为真时,设置zmCell的循环,如下列代码第5行所示,通过在每次调用方法“-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath{}”时,使用条件语句确认是否满足循环要求。当zmCell==nil时调用循环的标记,如下列代码第5行所示。然后使用调用预处理后的数据的数组,逐一给显示用户头像的的UIImageView添加头像的图片,在UILabel里显示用户的昵称,用户的状态,用户的个性签名,在线情况或离线时间。这些控件都放置在zmCell上,显示时随着cell的创建一起添加到UITableView上。zmCell=[tableViewcellForRowAtIndexPath:indexPath];[_zmTableViewaddSubview:zmCell];UITableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:@"QQ"];if(zmCell==nil){zmCell=[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:0];}3、zmCell的控件处理。在zmCell的基础功能完成后还需创建用于调用cell的隐藏UIButton,实现当点击zmCell时,可以跳转到聊天界面,开启聊天模式。首先需要为zmCell的按钮进行初始化,使用方法“cellBtn=[UIButtonbuttonWithType:UIButtonTypeCustom];”创建UIButtonTypeCustom型的UIButton,然后定义按钮的大小,用于设置zmCell的高度是60,所以可以这样定义zmCell的UIButton,“”创建覆盖zmCell的按钮,预留一个存放其他操作控件的位置,“cellBtn.frame=CGRectMake(0,0,250,60);”。然后为了方便确认按钮的层次结构,可以为cellBtn创建一个tag值,使用方法是“cellBtn.tag=aaa;”,其中aaa是indexPath参数里的row。然后需要对按钮进行操作的编写,给按钮一个调用操作的监听方法,“[cellBtnaddTarget:selfaction:@selector(cellClick:)forControlEvents:UIControlEventTouchUpInside];”其中cellBtn代表当前按钮的名字,目标则是在self上,调用函数是cellClick:,响应事件的条件则是“UIControlEventTouchUpInside”,当按下按钮,然后弹起来还在按钮时生效。最后将按钮控件放进zmCell里,使用方法是“[zmCelladdSubview:cellBtn];”。cellBtn=[UIButtonbuttonWithType:UIButtonTypeCustom];cellBtn.frame=CGRectMake(0,0,250,60);cellBtn.tag=aaa;[cellBtnaddTarget:selfaction:@selector(cellClick:)forControlEvents:UIControlEventTouchUpInside];[zmCelladdSubview:cellBtn];图3.4联系人列表截图4、启动按钮时,即调用方法cellClick时。需要完成一下操作,首先收集将要聊天的对象的信息,然后将信息和自己的信息存入一个共享的数组里,为在聊天界面里使用做预处理,方便获取聊天对象的信息,以及自身的信息,让聊天可以实现。实现使用连接方法,连接到服务

温馨提示

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

评论

0/150

提交评论