斯坦福大学公开课 iOS应用开发教程学习笔记(第六课)多个MVC的程序和故事版、UINavigationController、 Segues
来源:互联网 发布:odysseus windows 编辑:程序博客网 时间:2024/05/17 04:51
斯坦福大学公开课 iOS应用开发教程学习笔记(第六课)多个MVC的程序和故事版、UINavigationController、 Segues
1、多个MVC
前面的程序都是一个MVC,多个View时,怎么办,那就需要多个Controller。
一个MVC一次只能控制一个屏幕或更小的区域。
那如何切换两个MVC呢,用控制器群里的控制器:UINavigationController。
2、UINavigationController是个控制器
继承于UIVIewController,UINavigationController中间有个title。
它是个特殊的controller,因为它有一个Outlet只向一另外一个MVC,就是它的rootViewController。
rootViewController就是出现在白色区域的。原来的rootViewController放到UINavigationController后,它的bounds高度会变小一些。
通过执行一个segues,可以跳转到另外一个MVC上。就是把新的MVC push都屏幕上,点返回,把当前的MVC pop出来。
3、segues
segues有三种方式:
push
model
custom
4、添加Navigation Controller
选中你要嵌入的view Controllser,然后通过Editor的 Embed in包含进来一个Navigation Controller。
或者直接拖动到一个viewController连接;
这个箭头表示程序的开始。
5、pop一个ViewController的方法:
- (void)popViewControllerAnimated:(BOOL)animated;
6、两个关于segues非常重要的方法
跳转前准备的方法
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{if ([segue.identifier isEqualToString:@“DoAParticularThing”]) { UIViewController *newController = segue.destinationViewController;}}
可以决定你是否跳转到这个页面,获取到即将跳转页面的controller的实例,这样可以提前去设置它的属性。
通过Identifier跳转的方法:
- (void)performSegueWithIdentifier:(NSString *)segueId sender:(id)sender;
例子:
- (IBAction)rentEquipment{if (self.snowTraversingTalent == Skiing) {[self performSegueWithIdentifier:@“AskAboutSkis” sender:self];} else {[self performSegueWithIdentifier:@“AskAboutSnowboard” sender:self];}}
7、通过故事版来实例化一个ViewController的方法
NSString *vcid = @“something”;UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:vcid];
给视图命名 identifier
调用self.storyboard是一个ViewController的属性。
- (IBAction)doit{DoitViewController *doit = [self.storyboard instantiateViewControllerWithIdentifier:@”doit1”];doit.infoDoitNeeds = self.info;[self.navigationController pushViewController:doit animated:YES];}
可以不通过segue创建一个视图控制器
获取后,把它push到navigationController展示。
8、一个StoryBoard和Segues的Demo
Psychologist,再次使用happens MVC;
主要内容:
- 在两个viewController之间创建segue
- 把ViewController内嵌到NavigationController中去。
segue有两个很重要的属性
这两个属性在跳转时经常用到
- identifier
- destinationViewController
整个项目的源码下载:https://github.com/junxianhu/Phychologist
许多代码复用了第五课的FaceView;
这里主要是mainstoryBoard,以及ViewController。
贴部分代码:
ViewController.m
@@ -0,0 +1,67 @@//// ViewController.m// Phychologist//// Created by cipher on 15/10/20.// Copyright © 2015年 com.lab1411.cipher. All rights reserved.//#import "ViewController.h"#import "FaceViewController.h"@interface ViewController ()@property (nonatomic) int diagnosis;@end@implementation ViewController@synthesize diagnosis=_diagnosis;-(void)setAndShowDiagnosis:(int)diagnosis{ self.diagnosis = diagnosis; [self performSegueWithIdentifier:@"showDiagnosis" sender:self];}//单独的子view//-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{// if ([segue.identifier isEqualToString:@"showDiagnosis"]) {// [segue.destinationViewController setHappiness:self.diagnosis];// }//}//每个button单独建立一个segue//重新换了一个view界面,一直不执行该方法,原因是新的view中虽然三个button分别push了//但是,这个新的view没有选择class,记住一定要选择viewController,一定要关联-(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:80]; }else if([segue.identifier isEqualToString:@"serious"]){ [segue.destinationViewController setHappiness:20]; }else if([segue.identifier isEqualToString:@"TV"]){ [segue.destinationViewController setHappiness:50]; }}//每个button,引出不同的调用参数- (IBAction)flying { [self setAndShowDiagnosis:85]; //segue //[self performSegueWithIdentifier:@"showDiagnosis" sender:self];}- (IBAction)apple { [self setAndShowDiagnosis:85];}- (IBAction)dragones { [self setAndShowDiagnosis:20];}-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{ return YES;}@end
整个的mainStoryBoard如下:
整个的页面图如下:
。。。。。。
0 0
- 斯坦福大学公开课 iOS应用开发教程学习笔记(第六课)多个MVC的程序和故事版、UINavigationController、 Segues
- 2011斯坦福大学iOS应用开发教程学习笔记(第六课)故事版
- 2011斯坦福大学iOS应用开发教程学习笔记(第六课)故事版
- 2011斯坦福大学iOS应用开发教程学习笔记(第六课)故事版
- 斯坦福大学iOS应用开发教程学习笔记(第六课)故事版 StoryBoard
- 2011斯坦福大学iOS应用开发教程学习笔记(第六课)故事版
- 斯坦福大学公开课 iOS应用开发教程学习笔记(第七课)UIToolbar、iPad 和iPhone的通用程序
- 2011斯坦福大学iOS应用开发教程学习笔记(第七课)Pad和iPhone的通用程序
- 2011斯坦福大学iOS应用开发教程学习笔记(第七课)Pad和iPhone的通用程序
- 2011斯坦福大学iOS应用开发教程学习笔记(第七课)Pad和iPhone的通用程序
- 斯坦福大学iOS应用开发教程学习笔记(第七课)Pad和iPhone的通用程序
- 2011年冬斯坦福大学公开课 iOS应用开发教程学习笔记(第四课) Views 视图
- 2011年冬斯坦福大学公开课 iOS应用开发教程学习笔记(第四课) Views 视图
- 2011年冬斯坦福大学公开课 iOS应用开发教程学习笔记(第四课) Views 视图
- 斯坦福大学公开课 iOS应用开发教程学习笔记(第四课) Views 视图
- 斯坦福大学公开课 iOS应用开发教程学习笔记(第四课) Views 视图
- 斯坦福大学公开课 iOS应用开发教程学习笔记(第五课)Protocols,手势识别
- 斯坦福大学公开课 iOS应用开发教程学习笔记(第八课)viewController生命周期/Image/Scroll/WebViews
- Handler Android应用开发消息机制
- 【IOS 开发学习总结-OC-62】IOS 应用的生命周期
- 开始记录 iOS后台计时的代码。
- 线段树模板
- 重构:运用Java反射加多态 “干掉” switch
- 斯坦福大学公开课 iOS应用开发教程学习笔记(第六课)多个MVC的程序和故事版、UINavigationController、 Segues
- 学生信息是:姓名,学号,性别,年龄,用一个链表,把这些信息连在一起,给出一个age, 在些链表中删除学生年龄等于age的学生信息。
- 软件自动化测试工具介绍
- UIButton详解
- iOS开发之 MVVM的架构设计与团队协作的重要性
- stl的sort和手写快排的运行效率哪个比较高?
- 666666666
- Linux系统C语言读写文件总结 (二)
- 鸟哥的Linux私房菜-学习笔记-第二章【Linux 如何学习】