ios开发之视图控制器小结


视图控制器是IOS开发教程中的重点,应该在上几篇文章之前小结的,当由于课程已过,所以只能在这里补上“视图控制器”。本章依然由拾图网温州网站建设收集整理后提供分享。视图控制器是IOS开发占有非常重要的位置,所以我们一定要学好掌握:


视图控制器应该在MVC设计模式中扮演控制层(C)的角色,UIViewController的职责对内管理与之关联的View对外跟其他UIViewController通信和协调。一个视图控制器管理一个视图(它可以有子视图),其view属性指向它所管理的视图。UIViewController类可以有子类,可以使用一个系统的UIViewController子类或者直接自己创建一个UIViewController的子类。

 

那么视图控制器有什么作用呢?

1、创建和管理视图。

2、管理视图上显示的数据。

3、设备方向变化,调整视图大小以适应屏幕。

4、负责视图和模型之间的数据及请示的传递。

一、视图控制器剖析

视图控制器有一个导航项,一个工具栏子项集以及一个tabbarItem项与其关联。


二、经常用的的属性

• view:控制器管理的根视图

• title: 控制器导航栏的标题

• wantsFullScreenLayout: 是否需要全屏显示

• interfaceOrientation: 界面方向

• navigationItem:导航子项

• editing: 是否处理编辑状态

• hidesBottomBarWhenPushed: 入栈时隐藏底部栏

• toolbarItems: 工具栏子项集

• tabBarItem: 标签栏子项


• editButtonItem:返回一个编辑按钮   

• parentViewController :交视图控制器 

• searchDisplayController :搜索显示控制器

• splitViewController :分割视图控制器

• modalViewController :模式控制器

• navigationController :导航控制器

• tabBarController :标签控制器


三、主要方法

• – loadView:不要主动调用该方法,当访问控制器view的时候,就会调用该方法。如果要自己创建view,则需要重写该方法

• – viewDidLoad:当加载控制器的视图到内存时,该方法被调用。

• – viewWillAppear:

• – viewDidAppear:

• – viewWillDisappear:

• – viewDidDisappear:

• – shouldAutorotateToInterfaceOrientation:是否支持指定的界面方向。

• –willAnimateRotationToInterfaceOrientation: duration:将要使用动画过渡到某个界面方向。

• – didReceiveMemoryWarning:接收到内存警告信息。

• – presentModalViewController:animated:显示模式控制器

• – dismissModalViewControllerAnimated:隐藏模式控制器

• – setToolbarItems:animated:设置工具栏子项

• – setEditing:animated:设置编辑状态


四、设计模式

当调用视图控制器的view属性时,视图控制器会先调用loadView方法加载视图,因此,可以在loadView方法中创建所有的视图,这是比较好的编程惯例。接着会调用视图的viewLoad->viewWillAppear->viewDidAppear.


通过上面的简单介绍,已经有了一个大概的了解,下面我们通过一个案例来强化多“视图控制”的理解:

1、首先还是需要我们建一个EmptyProject来测试View和ViewController,我们在空的工程里添加新视图,只需在AppDelegate.m中添加我们的视图,为了更好的理解我们的视图,所以所有视图的创建和配置将都用手写代码编辑。

20140827190745139.png

2.在EmptyProject中添加一个视图,看一下效果,上面的代码是系统自动为我们创建的,为我们的EmptyProject添加一个UIWindow,接下来要放置的UIIView都是放在Window中,一般每个应用都只有一个Window当然有的游戏会有多个应用窗口

下面我们在Window上添加一个主视图,使用CGRectMake来给我们新添的View定位。 CGRectMake(x, y, width, height);  配置背景颜色为greenColor,最后添加到我们的window上。

20140827190745140.png

3、界面都是视图对象,即在UIView类的实例中进行布局,UIView表示屏幕上的一块矩形区域,负责渲染矩形区域中的内容,并且响应该区域内发生的触摸事件。我们还可以把视图看做是一个视图容器,视图上面还可以添加一个子视图。往父视图中添加的SubView会被放在一个数组中。往我们SuperView中添加的SubView的坐标和index都是相对于我们的父视图来配置的。我们为上面的视图在添加一个subView,代码如下:

20140827190745141.png

4、运行效果图:

20140827190745142.png


下面是iOS提供的一些管理子视图的方法,常用方法如下:

(1) initWithFrame : 通过frame初始化视图,参数为CGRectMake(x, y, width, height);

(2) insertSubView: atIndex: 往指定层上插入视图,哪个View调用该方法,index就是相对于谁。

(3) insertSubView: aboveSubView: 在某个视图上插入子视图。

(4) insertSubView: belowSubView: 在某个子视图的后面添加一个新的视图

(5) bringSubViewToFront: 把子视图放到最前

(6) sendSubViewToBack: 把子视图放到最后

(7) exchangeSubviewAtIndex: withSubviewAtIndex: 交换两个视图的前后顺序

(8) removeFromSuperview: 从父视图中移除view

(9) -(void) addSubview: (UIView *) view 添加一个视图

 视图的层次用index来区分,这个值从0开始以步长1依次增加,index为0的时候代表视图层次的最底层,下面是苹果官方文档对Views的介绍的截图:

20140827190745143.png

--------------------------------------------------------下面开始使用视图控制器来创建视图----------------------------------

1、首页开始创建一个基于窗口的Empty Application的项目;

UIViewController_1.png

2、创建一个视图控制器子类:File–New–New File(Command+N)然后选择Objective-C class,命名为RootViewController

UIViewController_2.png

3、然后在subclass of中输入UIViewController,单击Next按钮保存;

4、现在有一个RootViewController类,接着编辑它的代码。

@interface RootViewController ()
@end
@implementation RootViewController
-(void) loadView{
   // applicationFrame是整个可见区域,不包括状态栏
    UIView* view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
    //设置view的颜色
    view.backgroundColor = [UIColor greenColor];
    //添加一个标签
    UILabel* label = [[UILabel alloc] init];
    label.text=@"Hello World!";
    //自适应大小
    [label sizeToFit];
    //居中
    label.center = CGPointMake(CGRectGetMidX(view.bounds), CGRectGetMidY(view.bounds));
    //添加到view
    [view addSubview:label];
    //设置self.view = view这样视图控制器就可以管理这个视图了,如果实现了loadView那么就必须设置self.view
    self.view = view;   
}
...
@end

一个视图控制器负责获得或创建它自己的视图。如果视图控制器手动创建它的视图,必须重载UIViewController类的loadView方法。下面给视图设置一个颜色,放一个”Hello World!”标签在这个视图中,代码如上所示!


5、视图控制器已经准备好,现在准备使用它。我们要调整一下应用程序的委托类(AppDelegate),在应用程序委托类的头文件中,声明视图控制器属性。

@property (strong, nonatomic) RootViewController *rootViewController;

6、在应用程序委托的实现代码中,我们导入”RootViewController.h”,在应用程序委托的application: 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];
    //创建视图控制器
    RootViewController* theRVC = [[RootViewController alloc]init];
    self.rootViewController = theRVC;
    //不仅要创建视图,还必须把视图放到界面中
    [self.window addSubview:self.rootViewController.view];
    [self.window makeKeyAndVisible];
    return YES;
}

编译并运行应用程序,运行结果如下图所示:

UIViewController_3.png

7、还有另一种简单的方法是使用UIWindow的rootViewController属性。这样就不需要在应用程序委托类的头文件中,声明视图控制器属性。也不需要把视图作为子视图添加到窗口上。当给一个rootViewController属性分配一个UIViewController实例时,它会自动获得UIVIewController的视图,并使它成为窗口的唯一子视图。

- (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];
    //创建视图控制器
    RootViewController* theRVC = [[RootViewController alloc]init];
    // self.rootViewController = theRVC;
    //不仅要创建视图,还必须把视图放到界面中
    //[self.window addSubview:self.rootViewController.view];
    //这行代码与上面注释掉的两行代码的效果是一样的。
    self.window.rootViewController = theRVC;
    [self.window makeKeyAndVisible];
    return YES;
}

窗口的根视图控制器是全局可用的,如果需要获取根视图控制器,可以使用下面的代码:

UIViewController* rootController = [[[UIApplication sharedApplication] keyWindow] rootViewController];


以上资料有拾图网温州天时网站建设收集整理发布。视图控制器除了使用代码创建外,还可以通过nib文件来创建。



注:本文转载自拾图网[http://www.tshinet.com],转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除。
上一篇 下一篇

淘宝热销

  • Mistine小黄帽防晒霜乳SPF50泰版面部防紫外线隔离男女军训蜜丝婷

    【推荐理由】赠运费险

    【优惠券】20   【券后价】59.00

    【下单链接】18¥ CZ0001 G5fHdEqOsnB¥

    >>>>>> 马上打开

  • G7旗舰店越南进口美式纯黑咖啡粉速溶无糖0脂减燃正品学生提神

    【推荐理由】库存紧张,好评过万

    【优惠券】3    【券后价】26.90

    【下单链接】27¥ CZ0001 zb0bdEqLV7G¥

    >>>>>> 马上打开