IOS学习之斯坦福大学IOS开发课程笔记(第六课)

来源:互联网 发布:动态增加的div 调用js 编辑:程序博客网 时间:2024/06/05 09:14

转载请注明出处

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

作者:小马


这节课主要讲述多个MVC是如何协同工作的。到目前为止,所有的课程都只是涉及到一个视图。从这节课开始,将会持到多视图应用的例子。



多视图开发这里用navigationController举例子。这个也是比较常用的。如上图所示,一个 navigation Controller(MVC)会指向一个rootViewController(另一个MVC),这个是第一个要显示的MVC。

 

 


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

[objc] view plaincopy在CODE上查看代码片派生到我的代码片
  1. - (void)setAndShowDiagnosis:(int)diagnosis  
  2. {  
  3.     self.diagnosis = diagnosis;  
  4.     [self performSegueWithIdentifier:@"ShowDiagnosis" sender:self];  
  5. }  


 


我们通过菜单栏来添加一个导航控制器。把它嵌入到我们的rootViewController里来,很简单。

 

 


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

 

 


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

 

 

 


这里提到segue分为很多种,虽然这里只是用到push,其它的还是有必要介绍一下的。请仔细看上图的英文说明,不难理解。

 

 

 


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



关于segue还有一个非常重要,而且常用的方法,prepareforsegue函数。我们常在这个函数里向将要通过导航切换过去的那个controller来传递数据。也就是说这个函数是发生在新的视图被加载前的某个时刻。示例代码中也有这个:

[objc] view plaincopy在CODE上查看代码片派生到我的代码片
  1. //传递数据  
  2. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender  
  3. {  
  4.     if ([segue.identifier isEqualToString:@"ShowDiagnosis"])  
  5.     {  
  6.         [segue.destinationViewController setHappiness:self.diagnosis];  
  7.     }  
  8.     else if ([segue.identifier isEqualToString:@"celebrity"])  
  9.     {  
  10.         [segue.destinationViewController setHappiness:100];  
  11.     }  
  12.     else if ([segue.identifier isEqualToString:@"serious"])  
  13.     {  
  14.         [segue.destinationViewController setHappiness:20];  
  15.     }  
  16.     else if ([segue.identifier isEqualToString:@"TV kook"])  
  17.     {  
  18.         [segue.destinationViewController setHappiness:50];  
  19.     }  
  20.           
  21. }  


下面是代码演示时间。

 

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


我上面已经分析了一些相关的核心代码,这里不多说了。不过想要详细的介始另外一个知识,就是如何重用上节课的代码。操作不是很麻烦,但是很重要。

 

首先我们从原来的Happiness工程文件夹找到下面四个文件,并拖到Psychologist的工程中,如下图所示:


 

然后我们在storyboard里加一个新的viewcontroller,并给他增加一个view,接着设置controller对应的类为HappinessViewController, view对应的类为FaceView,如下图所示:

  

 

还有一点,要把view和controller连接起来,如下图所示:

 

 

最终运行的效果如下:

    

 

代码下载地址:

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

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

 


0 0
原创粉丝点击