转载请注明出处

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

IOS学习之斯坦福大学IOS开发课程笔记(第六课)的更多相关文章

  1. ios专题 - 斯坦福大学iOS开发公开课总结

    转自:http://blog.devtang.com/blog/2012/02/05/mvc-in-ios-develop/ 前言 iphone开发相关的教程中最有名的,当数斯坦福大学发布的”ipho ...

  2. 斯坦福大学IOS开发课程笔记(第七课第一部分)

    转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/31462099 作者:小马 这节课的内容太多,分两部分介绍.本节课主要是介绍怎样开发 ...

  3. [斯坦福大学2014机器学习教程笔记]第六章-代价函数(Cost function)

    在这节中主要讲的是如何更好地拟合逻辑回归模型的参数θ.具体来说,要定义用来拟合参数的优化目标或者叫代价函数,这便是监督学习问题中的逻辑回归模型的拟合问题. 我们有一个训练集,训练集中有m个训练样本:{ ...

  4. [斯坦福大学2014机器学习教程笔记]第六章-决策界限(decision boundary)

    这一节主要介绍的是决策界限(decision boundary)的概念,这个概念可以帮组我们更好地理解逻辑回归的假设函数在计算什么. 首先回忆一下上次写的公式. 现在让我们进一步了解这个假设函数在什么 ...

  5. 斯坦福大学 iOS 开发公开课总结

     斯坦福大学 iOS 开发公开课总结   前言 iPhone 开发相关的教程中最有名的,当数斯坦福大学发布的 "iPhone 开发公开课 " 了.此公开课在以前叫做<iPho ...

  6. 深度学习课程笔记(六)Error

    深度学习课程笔记(六)Error Variance and Bias: 本文主要是讲解方差和偏差: error 主要来自于这两个方面.有可能是: 高方差,低偏差: 高偏差,低方差: 高方差,高偏差: ...

  7. Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计

    Andrew Ng机器学习课程笔记(六)之 机器学习系统的设计 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7392408.h ...

  8. 2011斯坦福大学iOS应用开发教程学习笔记(第一课)MVC.and.Introduction.to.Objective-C

    blog.csdn.net/totogo2010/article/details/8205810  目录(?)[-] 第一课名称 MVC and Introduction to Objective-C ...

  9. iOS学习——(转)iOS中关于通知的使用

    在移动端开打过程中,经常会用到通知和推送,例如有短信来了需要通知提示,手机横屏了需要通知提示,插上耳机了需要通知提示等等,我们可以根据这些通知采取对应的动作.iOS系统自身定义了很对通知,但是在开发过 ...

随机推荐

  1. Hadoop-CDH源码编译

    * Hadoop-CDH源码编译 这一节我们主要讲解一下根据CDH源码包手动编译的过程,至于为什么要使用CDH,前几节已经说明,那为什么又要自己手动编译,因为CDH的5.3.6对应的Hadoop2.5 ...

  2. Ubuntu14.04下tensorflow安装

    自己电脑没装双系统,于是决定在虚拟机里装个tensorflow,以下是安装过程: 1.安装anaconda2 for Linux 官网下的话很慢,去清华的镜像网站下吧,我上一篇文章有网址 安装:bas ...

  3. Python3基础笔记--装饰器

    装饰器是十二分重要的高级函数. 参考博客:装饰器 所需前提知识: 1.作用域: LEGB 2.高阶函数 高阶函数是至少满足下列一个条件的函数: 1)接受一个或多个函数作为输入 2)输出一个函数 注意理 ...

  4. 使用 validate 进行输入验证

    validate 官方教程网址: http://www.runoob.com/jquery/jquery-plugin-validate.html 在表单页面引入两个核心 js 文件 #官方的两个文件 ...

  5. ubuntu 安装Gremlin 的图形化环境

    参考文档:https://www.jianshu.com/p/618cf6667381 部署HugeGraphServer # 直接下载release包 网址:https://github.com/h ...

  6. webStrom的破解以及汉化

    破解方法: 把JetbrainsCrack-3.1-release-enc.jar包放到bin目录下,然后把webstorm64.exe.vmoptions文件用文本打开, 在最后面加上一句-java ...

  7. 洛谷 P1273 有线电视网 && caioj 1109 树形动态规划(TreeDP)4:比赛转播(树上分组背包总结)

    从这篇博客往前到二叉苹果树都可以用分组背包做 这依赖性的问题,都可以用于这道题类似的方法来做 表示以i为根的树中取j个节点所能得的最大价值 那么每一个子树可以看成一个组,每个组里面取一个节点,两个节点 ...

  8. 题解 P1198 【[JSOI2008]最大数】

    说起来这还是蒟蒻AC的第一道省选线段树呢. 这道题和其他线段树最大的不同就是在于本题数组一直在增大. 寻常的线段树蒟蒻习惯用如下的结构体储存,然而对于此题就不行了: struct node{ int ...

  9. [Spark源代码剖析] DAGScheduler提交stage

    转载请标明出处:http://blog.csdn.net/bigbigdata/article/details/47310657 DAGScheduler通过调用submitStage来提交stage ...

  10. C#读写共享目录

    C#读写共享目录 该试验分下面步骤: 1.在server设置一个共享目录.在这里我的serverip地址是10.80.88.180,共享目录名字是test,test里面有两个文件:good.txt和b ...