首页 > 代码库 > IOS学习之斯坦福大学IOS开发课程笔记(第六课)

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

转载请注明出处

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设置标识符,目的是为了可以在代码里控制它。比如下面的示例代码:

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


 


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

 

 


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

 

 


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

 

 

 


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

 

 

 


有时候我们会需要在代码里触发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];
    }
        
}


下面是代码演示时间。

 

我们将创建一个新的工程,叫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