1、前期所实现的PlayingCard游戏,其View Controller只能适应PlayingCard这一种游戏规则。而将createDeck函数修改为返回一个nil后,整个View Controller与PlayingCard就没有关系了(同时也就没法运行了),成为了一种抽象的概念(类似于C++中的抽象类),实际的控制器必须 派生这个类才能实现自身的功能。

新建一个View Controller类,并实现createDeck方法。此时build工程,无法正常运行。因为当前storyboard关联的依然是那个抽象类。

修改方法:在storyboard最下一栏中选择View Controller,然后在右侧identity inspector(就是右侧栏顶部左起第三个标签),在Class一栏中改为派生类即可。如下图所示:

2、多MVC:

#如何创建:在控件库中拖出一个新的View Controller到storyboard中;新建一个视图控制器类;参考1的方法将storyboard于视图控制器类绑定;

#如何显示多MVC:使用UINavigationController和UITabBarController,这两类的特点是他们的“view”可以是另一个视图控制器;

3、导航控制器UINavigationController:

#适用场合:需要显示多级信息的时候;

# 组成元素:导航栏(上面的内容由所VC包含的MVC的navigationItem决定);标题(也是由包含的MVC的title决定);导航栏右侧按键 (由包含的MVC的rightBarButtonItem决定)和返回键;地步的工具栏(由包含的MVC的toolBarItems决定);

#segue:由一个MVC进入到另一个MVC的机制,也可以认为是场景切换的机制。

#使用方法:在storyboard中拖入另一个view controller,在前一个viewcontroller的按钮等控件中ctrl+拖动指向第二个viewcontroller,这样就建立起了 segue关系。随后选择根视图控制器,将其植入navigation controller中(editor->embed in->navigation controller);

#个性化定义:双击指定子MVC的标题(title);可以在控件库中选择UIBarButtonItem添加到导航栏作为右侧按钮;

#场景切换的函数:

1、准备相关的信息:-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;

2、确定切换是否执行:-(BOOL)shouldPerformSegueWithIdentifier:(NSString *) identifier sender:(id)sender;返回NO则不进行切换;不常用;

3、通信方式:在源ViewController中实现prepareForSegue,则可以获得segue.destinationViewController,这样就可对目标ViewController进行操作;

#通过代码来创建导航控制器

1、创建一个ViewController类,命名为RootViewController;在AppDelegate.m中引用其头文件;

2、创建根视图控制器和导航控制器;

3、将导航控制器设为根控制器;完成后的didFinishLaunchingWithOptions如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];// Override point for customization after application launch.self.window.backgroundColor = [UIColor whiteColor];[self.window makeKeyAndVisible];//创建根视图控制器RootViewController *rootViewController = [[RootViewController alloc] init];//创建导航控制器UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];//将导航控制器设为根控制器self.window.rootViewController = navigationController;return YES;
}

然后运行就会发现根视图出现在了导航控制器开始的位置。

4、添加视图切换的功能:首先在根视图中添加控件,用于控制显示下一个视图控制器,方法是重写loadView:

-(void) loadView
{UIView *baseView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];self.view = baseView;baseView.backgroundColor = [UIColor greenColor];UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];[button setTitle:@"Push" forState:UIControlStateNormal];[button setTintColor:[UIColor whiteColor]];[button setFrame:CGRectMake(90, 200, 140, 35)];[button setBackgroundColor:[UIColor purpleColor]];[button addTarget:self action:@selector(push) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:button];
}

在控件的响应函数中,新建并初始化第二个ViewController,并将其push到导航控制器中。

至此,在第一个视图中点击push按钮,导航栏就会进入第二个视图控制器中。需要注意的是,一个导航控制器所控制的多个视图控制器,每一个都可以用

self.navigationController的方法获取到导航控制器;导航栏(NavigationBar)和工具栏(ToolBar)属于导航控制器,但是上面的元素属于各个子视图控制器;

在第二个视图控制器中可以添加返回功能,很简单,让self.navigationController弹出即可

[self.navigationController popViewControllerAnimated:YES];

除了这个基本函数之外,还可以返回至根视图等,详细可见文档。

4触控栏UITabBarController

#触控栏所包含的各个视图控制器是平级关系,不存在前后级的关系;具体的使用方法与导航控制器类似,需要时再详述。

原文:http://blog.csdn.net/shaqoneal/article/details/16831349

iOS7应用开发6:UINavigation, UITabbar控制器的多态性相关推荐

  1. iOS7应用开发5、视图控制器View Controller及其生命周期

    1.UITextView: 该类与Label类类似,可显示多行,可以编辑内容,可以滚动查看内容: 包含属性NSTextStorage *textStorage,该类是NSMutableAttribut ...

  2. iOS7应用开发1、菜鸟那点儿事儿

    序:今天开始新开一个坑,作为一个准备了许久却依然摆 脱不了24k纯菜鸟身份的程序员,跟随Stanford的世界未来精英们一起学习iOS7应用开发的相关知识,同时也是为了自己以后的业余项目做准备,提 升 ...

  3. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  4. 用Java开发自己的Kubernetes控制器,想试试吗?

    作者 | Nicolas Fränkel 译者 | 天道酬勤 责编 | 徐威龙 封图| CSDN 下载于视觉中国 在本文中,我们将开始开发自己的Kubernetes控制器. 技术栈可以是Python. ...

  5. IOS开发UI篇—导航控制器属性和基本使用

    IOS开发UI篇-导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController ...

  6. 用 Java 开发自己的 Kubernetes 控制器,想试试吗?

    作者 | Nicolas Fränkel 译者 | 天道酬勤,责编 | 徐威龙 封图 | CSDN 下载于视觉中国 在本文中,我们将开始开发自己的Kubernetes控制器. 技术栈可以是Python ...

  7. VCU整车控制器开发 VCU开发设计策略 整车控制器设计方案

    整车控制器开发 VCU开发设计策略 整车控制器设计方案 纯电动整车控制器设计方案 整车控制策略,车辆运行模式管理 基于MC9S12XEP100 完成代码,原理图,PCB, 详细控制策略,车辆运行模式管 ...

  8. 和12岁小同志搞创客开发:两个控制器之间如何实现通信?

    目录 1.有线通信 2.无线通信 3.串口点灯 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. ​​​项目专栏:https://blog.csdn.net/m0_38106 ...

  9. 物联网ARM开发- 5协议 FSMC控制器外扩SRAM存储器

    前言:STM32F407ZGT6 自带了 192K 字节的 SRAM,对一般应用来说,已经足够了,不过在一 些对内存要求高的场合,STM32F4 自带的这些内存就不够用了.比如跑算法或者跑 GUI 等 ...

最新文章

  1. socket心跳检测
  2. IPv6扩展头部 (一) 扩展头部格式、类型与扩展选项
  3. Effective Java读书笔记二:枚举和注解
  4. 容器部署不适合文件服务器,建议使用内置容器部署War文件与可执行jar
  5. 中文数据集有奖公开征集
  6. 并查集判断是否有环存在
  7. 《红楼梦》告诉你,什么才是真正的教养
  8. 宁波政务云资源的介绍与申请
  9. python 标准库之os
  10. MTK驱动开发(44)---如何对GPS下达清除辅助资讯的command
  11. Windows核心编程_Visual Studio2019找不到MFC项目
  12. Bootstrap插件之 下拉菜单 源码分析~~
  13. 触发器的创建和使用(sql2005)
  14. 学习笔记—前端移动端开发知识点总结
  15. Resolve operation not in progress, we are not resuming.
  16. PHP基础——安装Apache软件
  17. ios播放器相关(音乐列表获取)
  18. python中字符串也能进行关系比较操作_python3--基础综合测试
  19. 使用python在pycharm中制作二维码
  20. libzip开发笔记(一):libzip库介绍、编译和工程模板

热门文章

  1. 数论 —— 斐波那契数列(Fibonacci)
  2. 31 MM配置-采购-采购申请-采购申请审批策略-定义审批过程
  3. 35 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义在产品和废品的评估变式 (目标成本)
  4. linux内核启动过程4:内核运行时
  5. 爬虫模拟登陆手机验证码_爬虫入门到精通-headers的详细讲解(模拟登录知乎)...
  6. [ ERROR ] Can not init Myriad device: NC_ERROR
  7. STTN、DSTT、FuseFormer总结(它们改进了什么?)
  8. Anatomy of a Flink Program(Flink程序的剖析)
  9. java编写在输入特定日期之间_java实现输入日期
  10. ubuntu 18.04.1 使用心得