转载请注明出处
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