24H免费课程咨询  TEL:13401595960   QQ:1870218756  微信:13401595960(李老师)

东方博宜

网站首页 > 软件开发资讯 > IOS开发

【常州iOS开发培训班】iOS开发——从一道题看Delegate

2018-05-13 22:04:11 东方博宜 阅读

继上次通过Storyboard完成了简单地页面跳转之后,我发现了很多问题,比如从第二个页面回跳到第一个页面,并不是依照正向跳转那样简单地模仿就好,在实际运行中会发现程序报错了。这次,我们将结合一道经典的题目,完成对页面跳转、传值以及附带的相关键盘输入的问题总结。题目源自《iOS开发之美》一书,有兴趣的小伙伴可以去翻来看看,我在学习之后加入了很多自己的感悟和实际操作的情况。原题如下:


有两个scene,分别为Scene A和Scene B。Scene A上有一个UIButton(Button A)和一个UILable(Lable A);Scene B上有一个UITextFiled(textFiled)。当单击Scene A上的Button A时,跳转到Scene B,在Scene B的textFiled上输入文字,单击键盘的“完成”按钮,返回到Scene A,并在Scene A的Lable A上显示刚才输入的内容。


这是一个典型的场景之间的跳转和逆向传值问题,看似简单,却暗藏杀机。我们不仅要使用Storyboard框架,还要采用Delegate模式,最后达到题目要求。


Delegate


什么是Delegate?跟这道题目又有什么关系呢?


简单分析一下题目,主要包括Storyboard的应用,页面跳转,数据的交互,似乎跟Delegate没什么关系呢。在这里我决定先不刨根问底,留一个小悬念,在实际的解决问题的过程中去慢慢“悟”关于Delegate的一切,它是一种设计模式,并不是那么简单就能描述清楚的。


页面之间的数据传递


iOS提供了多种方法,来实现页面之间的数据传递:


使用SharedApplication,定义一个类似全局的变量来传递

使用文件,或者使用NSUserdefault来传递

通过一个单例(SingleXX)的class来传递

通过Delegate来传递


关于数据的存储方式共有五种:


User Defaults

Property List(对应)

Object archives

SQLite

Core Data


在本道题目当中,显然采用Delegate方式是最佳方案。


界面搭建


有了先前我们使用Storyboard的经验,我们先很快的对界面进行搭建。先抛开所有的segue不管,先把题目中描述的情况展现出来再说。


我们新建名为delegateSentValue的工程,在原有viewController的基础上再新建一个,同时新建名为viewController2的.h和.m文件,对它们进行关联。再向两个view中拖放组件,并且将它们关联到相应的文件。这个过程应该是很简单的,我们暂且不管需要响应事件的Button,只是将两个Lable和一个textFiled在两个.h文件中进行属性声明。完成后如下图:

1464677037394073.png

1464677141916130.png

搭建完成界面之后,我们先实现从Scene A到Scene B的跳转。通过“Ctrl+drag”操作,将Button与Scene B关联,设置为“modal”模式,然后我们选中这个Segue,将它的identifier命名为Segue_ID_AB。

1464677153328287.png

我们可以先来运行下,这时我们可以实现通过点击按钮实现页面正向跳转的功能,点击输入框,我们可以接受键盘的输入。


Delegate应用


我们所剩的任务还有输入内容,单击键盘上的“完成(return)”按钮,返回Scene A,并将刚才输入的内容显示在Scene A中。


对于一个Delegate应用,需要5步来完成:


委托者声明一个Delegate

委托者调用Delegate内的方法

关联委托者与被委托者

被委托者遵循Delegate协议

被委托者重写Delegate内的方法

委托者声明一个Delegate

常州东方博宜是一家专注IT,互联网,电脑方面的顶尖培训机构,欢迎社会及院校有志互联网营销,搜索引擎营销的人士,来东方博宜报名学习,互相交流。

常州东方博宜地址:常州天宁区延陵西路2号工人文化宫5号楼

 2.新北区太湖东路9-4号常州创意园E12


Powered by 东方博宜教育咨询江苏有限公司  ©2008-2018 www.czos.cn