iPhone中的view视图是应用程序对于数据最直观、最直接的呈现方式,如下是我在学习了iPhone中的视图控制器以及由其衍生的特殊子类的总结,希望对那些初学者有所帮助:

UIViewController和其子类

如何设置根视图控制器

UIViewController是最基础也是最简单的视图控制器类,所有其它拥有特殊效果的视图控制器,如接下来要讲到的UITabBarController、UINavigationController都是它的子类;

首先,在这里我们通常都是先创建一个Empty为模板的工程项目,然后我们创建一个类继承自UIViewController,暂时不勾选创建xib文件,在这里暂时都是用纯代码来创建界面,目的是让读者能够更好的理解UIViewController中内部是怎么运作的,在AppDelegate中创建一个我们刚刚创建的视图控制器类的实例,然后把window的rootViewController交给这个实例,最后我们点击run,程序运行后在模拟器中呈现出来的视图就是由UIViewController控制的视图;

设置视图控制器为根视图控制器的代码:

self.window.rootViewController = 我们创建的实例

在视图中画图,包括基本图形和UI元素(纯代码创建,不包含xib文件)

我们所在View中所绘制的图形,是和UIButton、UILabel等等一样,都是作为组件添加到视图中的。既然是组件,所以他们会随着添加顺序的不同而会产生不同的层次结构。

首先在这里,简单介绍下要在哪里绘图,和一些绘图最基本的知识;然后,结合UIKit框架中的一些UI元素去创建一些特殊的UI;当然也可以包含xib文件来创建视图控制器,这部分的内容,我以后会加上,现在先掌握这最古板、最繁琐但却是最好理解,最容易掌握的方法先,然后再去掌握xcode内带的特性去简化自己的操作。

程序运行效果:

1)首先创建一个视图控制器类,继承自UIViewController(选择不包含xib文件),然后再创建一个视图类,继承自UIView;

2)在视图控制器类中导入视图类,并且创建一个视图类实例;我们可以在ViewController类的初始化函数中进行有关初始化工作(包括对UIView的初始化),然后在viewDidLoad中把该视图类实例设置为视图控制器所管理的视图,只有这样才能把视图显示在屏幕上;

[self setView:控制器控制的视图];

3)绘图:所有和绘图有关的代码都是放在这个函数中的

- (void)drawRect:(CGRect)rect
{
// Drawing code
}

4)绘图代码示例(绘制直线):

    CGContextRef context = UIGraphicsGetCurrentContext() ;
CGContextSetLineWidth(context, 10.0) ; CGContextMoveToPoint(context, 100, 60);
CGContextAddLineToPoint(context, 200, 300) ;
CGContextStrokePath(context) ;

5)添加UI元素示例(按钮控件)

    self.btn = [UIButton buttonWithType:UIButtonTypeRoundedRect] ;
self.btn.frame = CGRectMake(200, 50, 100, 30) ;
[self.btn setTitle:@"Button" forState:UIControlStateNormal] ;
[self.btn addTarget:self action:@selector(btnAction) forControlEvents:UIControlEventTouchUpInside] ;
[self.view addSubview:self.btn] ;

UITabBarController的使用

IOS7中很多常见的软件都是用UITabBarController,如拨号界面,QQ、微信等等app,都是用这个视图控制器,接下来就是介绍这种视图控制器的用法。

运行效果图:

1)首先我们可以在AppDelegate.m文件中创建一个UITabBarController实例,并且把它设置为主window的rootViewController:

    UITabBarController *mainController = [[UITabBarController alloc] init] ;

    self.window.rootViewController = mainController ;

2)然后把上面所讲的UIViewController中我所创建的类导入到这个项目中,在上一部分所讲的视图控制器的初始化函数中(自己重写父类的init函数)设置标签条视图的图片和名称:

        self.tabBarItem.title = @"Tab1" ;

        self.tabBarItem.image = [UIImage imageNamed:@"icon_number.png"] ;

3)最后回到步骤1),创建一个2)中的视图控制器实例,并且把他添加到UITabBarController中:

    UITabBarController *mainController = [[UITabBarController alloc] init] ;

    WBViewController *vc = [[WBViewController alloc] init] ;

    mainController.viewControllers = @[vc] ;

    self.window.rootViewController = mainController ;

UINavigationController

未完待续

和iPhone有关的视图控制器:UIViewController、UITabBarController、UINavigationController及其混合用法的更多相关文章

  1. 0104.1——视图控制器UIViewController

    一.生命周期 当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc                              创建对象,分配空间2.init (initWit ...

  2. [Xcode 实际操作]三、视图控制器-(2)UITabBarController选项卡(标签)视图控制器

    目录:[Swift]Xcode实际操作 本文将为你演示,选项卡视图控制器的创建和使用. 在项目文件夹[DemoApp]上点击鼠标右键,弹出右键菜单. [New File]->[Cocoa Tou ...

  3. iOS开发之视图控制器(UIViewController)

    视图控制器应该在MVC设计模式中扮演控制层(C)的角色,UIViewController的职责对内管理与之关联的View,对外跟其他UIViewController通信和协调.一个视图控制器管理一个视 ...

  4. 学习笔记:iOS 视图控制器(UIViewController)剖析

    转自:http://www.cnblogs.com/martin1009/archive/2012/06/01/2531136.html 视图控制器在iOS编程中占据非常重要的位置,因此我们一定要掌握 ...

  5. [Xcode 实际操作]三、视图控制器-(5)使用UINavigationController视图入栈和出栈

    目录:[Swift]Xcode实际操作 本文将演示使用导航控制器的几个跳转方式 选择编辑第二个视图控制器文件 import UIKit //定义一个全局变量,用来记录当前显示区域的视图的编号 clas ...

  6. [Xcode 实际操作]三、视图控制器-(4)使用UINavigationController导航栏和工具栏

    目录:[Swift]Xcode实际操作 本文将演示如何显示和隐藏导航视图的导航栏和工具栏 打开第一个视图控制器 import UIKit class FirstSubViewController: U ...

  7. [Xcode 实际操作]三、视图控制器-(3)使用UINavigationController视图控制器

    目录:[Swift]Xcode实际操作 本文将演示导航视图控制器的使用. 选择项目导航区的资源文件夹.需要导入两张图片,作为选项卡控制器的图标. [+]->[Import]->选择图片-& ...

  8. iOS,视图控制器相关(UIViewController)

    1.视图控制器各个方法调用时机 2.选项卡(Tab Bar)和导航栏(Navigation Bar) 3.有无控制器的页面跳转 4.页面跳转隐藏底部选项卡 5.获取导航栏和状态栏高度,隐藏导航栏返回按 ...

  9. 标签栏控制器(UITabBarController)

    一.标签栏控制器基础 1.绪论 a.一个标签栏是一个独立的界面对象,它经常与一个视图控制器(UITabBarController是UIViewController的子类)一起使用. b.一个标签栏项目 ...

随机推荐

  1. mapreduce编程模型你知道多少?

    上次新霸哥给大家介绍了一些hadoop的相关知识,发现大家对hadoop有了一定的了解,但是还有很多的朋友对mapreduce很模糊,下面新霸哥将带你共同学习mapreduce编程模型. mapred ...

  2. 网易实习笔试真题C/C++

    刚做的时候根本就没有想到解题思路,刚好看到了别人的思路,自己写了一下.里面对unordered_map及vector二维数组的建立很灵活,另外区别了一下map,unordered_map,hash_m ...

  3. 【VC】VC工具栏图标合并工具(非tbcreator和visual toolbar)

    VC开发难免会用到toolbar,在没有美工的时候,大部分时间我们只能自己上. 第一个方法:fireworks/photoshop平铺.现在的图片资源大多为背景透明的png图片,虽然fireworks ...

  4. Failed to read artifact descriptor--maven问题总结(能力工场)

    在开发的过程中,作为新手,经常遇到Maven下载依赖的时候,"Failed to read artifact descriptor for xxx:jar"的错误 对于这种非业务相 ...

  5. hadoop2.6.0 --- 64位源代码

    今天有朋友在群里找hadoop最新的2.6.0的源代码,其实这个源代码在hadoop的官方网站是有下载的(应该是32位的),还有一个src,不过给的是maven版本,需要自己在机器上编译一下(我的机器 ...

  6. ajax 新闻栏目

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. AnnotationSessionFactoryBean用法介绍

    http://blog.csdn.net/flyingfalcon/article/details/8273618 —————————————————————————————————————————— ...

  8. ArcGIS Desktop10.2与CityEngine2012兼容问题

    要培训ArcGIS Desktop和Esri CityEngine2012.在一台机器上装好Desktop10.2之后,在注册Esri CityEngine2012时报出了"7019:Inv ...

  9. [iOS微博项目 - 3.3] - 封装网络请求

    github: https://github.com/hellovoidworld/HVWWeibo   A.封装网络请求 1.需求 为了避免代码冗余和对于AFN框架的多处使用导致耦合性太强,所以把网 ...

  10. How Tomcat Works(十二)

    tomcat容器通过一个称为Session管理器的组件来管理建立的Session对象,该组件由org.apache.catalina.Manager接口表示:Session管理器必须与一个Contex ...