转载请注明出处

http://blog.csdn.net/pony_maggie/article/details/28398697

作者:小马

这节课主要讲述多个MVC是怎样协同工作的。到眼下为止。全部的课程都仅仅是涉及到一个视图。从这节课開始,将会持到多视图应用的样例。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9ueV9tYWdnaWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

多视图开发这里用navigationController举样例。这个也是比較经常使用的。如上图所看到的,一个 navigation Controller(MVC)会指向一个rootViewController(还有一个MVC),这个是第一个要显示的MVC。

在导航控制器里,连接各个MVC是通过一个叫segue的东东。在storyboard里仅仅须要按住control键,从一个controller上的某个控件(比方button)拖到还有一个controller上就可以。这样就建立了一个segue,然后我们能够给这个segue设置标识符,目的是为了能够在代码里控制它。比方以下的演示样例代码:

- (void)setAndShowDiagnosis:(int)diagnosis
{
self.diagnosis = diagnosis;
[self performSegueWithIdentifier:@"ShowDiagnosis" sender:self];
}

我们通过菜单条来加入一个导航控制器。把它嵌入到我们的rootViewController里来,非常easy。

上图向我们展示了带导航功能的app长什么样。中间部分是它的view(UIView),上面中间部分是导航栏。 中间的文字是title,左边是backbutton,它是一个UIBarButtonItems控件。

实际使用时,会很少的机会用到popViewControllerAnimated这个函数。大部分情况下我们会用上面提到的back button来回到上一级的view。

这里提到segue分为非常多种,尽管这里仅仅是用到push,其他的还是有必要介绍一下的。

请细致看上图的英文说明。不难理解。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9ueV9tYWdnaWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

有时候我们会须要在代码里触发segue(而不是通过上面提到的拖)。方法是通过performseguewithidentifier函数。什么情况下会有这个须要呢? 比方我们有个segue仅仅在某种条件才会建立。參看上面的演示样例代码。

关于segue另一个很重要,并且经常使用的方法,prepareforsegue函数。

我们常在这个函数里向将要通过导航切换过去的那个controller来传递数据。也就是说这个函数是发生在新的视图被载入前的某个时刻。演示样例代码中也有这个:

//传递数据
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"ShowDiagnosis"])
{
[segue.destinationViewController setHappiness:self.diagnosis];
}
else if ([segue.identifier isEqualToString:@"celebrity"])
{
[segue.destinationViewController setHappiness:100];
}
else if ([segue.identifier isEqualToString:@"serious"])
{
[segue.destinationViewController setHappiness:20];
}
else if ([segue.identifier isEqualToString:@"TV kook"])
{
[segue.destinationViewController setHappiness:50];
} }

以下是代码演示时间。

我们将创建一个新的project。叫Psychologist(心里学家), 这是一个非常easy的demo,它依据我们回答的问题,设置”幸福”的程度,然后改变笑脸(还记上节课的happiness演示样例吗)的微笑程度。所以这里会用上节课的一些代码。

我上面已经分析了一些相关的核心代码,这里不多说了。只是想要具体的介始另外一个知识,就是怎样重用上节课的代码。操作不是非常麻烦。可是非常重要。

首先我们从原来的Happinessproject目录找到以下四个文件。并拖到Psychologist的project中,例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9ueV9tYWdnaWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

然后我们在storyboard里加一个新的viewcontroller,并给他添加一个view,接着设置controller相应的类为HappinessViewController, view相应的类为FaceView,例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9ueV9tYWdnaWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">  

另一点,要把view和controller连接起来,例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9ueV9tYWdnaWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

终于执行的效果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9ueV9tYWdnaWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">    

代码下载地址:

https://github.com/pony-maggie/Psychologist

http://download.csdn.net/detail/pony_maggie/7442627

最新文章

  1. uploadfile图片上传和ashx
  2. 最新hadoop+hbase+spark+zookeeper环境安装(vmmare下)
  3. 自定义view 画圆
  4. CSV - 操作比较
  5. Struts2的标签库(四)——数据标签
  6. 奥运会订票系统c语言代写源码下载
  7. Linux中的文件上传下载
  8. struts2 查 找总结
  9. Web---HTTP请求、重定向、转发和数据压缩
  10. 深度剖析:CDN内容分发网络技术原理--转载
  11. 【HDOJ】1271 整数对
  12. Codeforces 527C Glass Carving(Set)
  13. (负)-margin在页面布局中的应用
  14. Java集合-----java集合框架常见问题
  15. WPF 中 DispatcherTimer 计时器
  16. linux 安装matlab
  17. MemAdmin 轻量级可视化Memcached管理工具
  18. 盖得化工----requests/bs4---采集二级网址
  19. Java Utils工具类大全(转)
  20. (3)socket的基础使用(基于UDP协议)

热门文章

  1. P 值(p value)与统计检验
  2. IE(8~11+) 可用右键加速器
  3. C#线程安全打开/保存文件对话框
  4. SPOJ8222 NSUBSTR - Substrings 后缀自动机_动态规划
  5. 洛谷1019 单词接龙 字符串dfs
  6. HDU-1034 Candy Sharing Game 模拟问题(水题)
  7. 编译bash实现history的syslog日志记录
  8. MapReduce JOB 的输出与输出笔记。
  9. KVM硬件辅助虚拟化之 EPT in Nested Virtualization
  10. Node.js的helloworld 程序