首页 > 其他分享 >iOS7应用开发6:UINavigation, UITabbar控制器的多态性

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

时间:2023-03-27 18:34:50浏览次数:50  
标签:UITabbar 多态性 self 控制器 视图 MVC UINavigation 导航 button


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

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

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

iOS7应用开发6:UINavigation, UITabbar控制器的多态性_移动开发

 

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到导航控制器中。

iOS7应用开发6:UINavigation, UITabbar控制器的多态性_视图控制器_02

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

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

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



[self.navigationController popViewControllerAnimated:YES];



 

 

iOS7应用开发6:UINavigation, UITabbar控制器的多态性_c/c++_03


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

 

4触控栏UITabBarController

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



 

标签:UITabbar,多态性,self,控制器,视图,MVC,UINavigation,导航,button
From: https://blog.51cto.com/u_8895844/6152840

相关文章

  • C#多态性学习,虚方法、抽象方法、接口等用法举例
    1.多态性定义  C#中的多态性是OOP(面向对象编程)的一个基本概念,它允许一个对象在不同情况下表现出不同的行为,以增强代码的可重用性和灵活性。  根据网上的教程,我们得......
  • 派生,super 多态与多态性 组合
    派生的方法与重用:方法一:指名道姓的调用某一类函数>>>classTeacher(People):...def__init__(self,name,sex,age,title):...People.__init__(self,name......
  • 面向对象程序设计 第八章 多态性
    目录运行时的多态性(虚函数、纯虚函数、抽象类)  override与final  重载运算符(运算符重载为成员函数)  运算符重载为非成员函数 ......
  • C# 多态性
    多态性:分为静态多态和动态多态1.静态多态相同一个方法名 参数的数量或者类型不一样,这就是静态多态。2.动态多态有抽象类:不同的子类去继承抽象类的方法,实现不同的功......
  • Python类的多态和多态性
    一、多态多态指的是一类事物有多种形态,一个类有很多个子类,因而多态的概念是基于继承的序列数据类型有多种形态:字符串,列表,元组动物有多种形态:人,狗,猪1.动物的多种形态......
  • UITabBarController 标签栏控制器-IOS开发
    在UIKit中UITabbar代表了标签栏,而UITabBarController对其进行了封装,令多个不同的视图管理与切换变的更加轻松。构建一个标签栏控制器,首先要为每个按钮准备一个单独的页......
  • 多态性(polymorphism)
    外在表现出多种形式。一。分类  二。抽象类    多态表现在,抽象类自身不能实例化,要实例化必使用其派生的具类。      三。接口和抽象类的抽象......
  • C++多态性
    虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。虚函数    是在基类中使用关键字virtual声明的函数。在派生类中重......
  • 多态性
     /*面向对象特征之三:多态性​1.理解多态性:可以理解为一个事物的多种形态2.何为多态性:  对象(子类)的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)3.多态......
  • 第12章 面向对象编程:多态性
    12.1简介程序通用化12.2多态性介绍:多态视频游戏12.3类继承层次中对象之间的关系12.4类型域和switch语句12.5抽象类和纯virtual函数跟一个表格有关12.6实例研究......