iOS开发学习笔记③ - 视图控制器
2015-03-17 09:59
465 查看
视图控制器
视图控制器是UIViewController类或其子类的对象。每个控制器都负责管理一个视图层次结构,包括处理视图相关用户事件,以及将整个视图层次结构添加到应用窗口。
以下以建立一个控制视图A和视图B的控制器为例。
UIViewController的view属性
1、 首先为A,B建立两个UIViewController:ControllerA和ControllerB继承了UIViewController;ControllA、B从UIViewController中继承了一个重要特性:
@property (nonatomic, strong) UIView *view;
view属性指向一个UIView对象,UIViewController可以管理一个视图层次结构,view就是这个视图层次结构的根视图。
视图控制器可通过两个方式创建视图层次结构:
代码方式:覆盖UIViewController中的loadView方法。
NIB文件方式。
通过代码创建
2、覆盖loadView方法.#import "ViewA.h" @implementation ControllerA - (void)loadView { // 创建一个ViewA对象 ViewA *viewA = [[ViewA alloc] init]; //将对象赋给视图控制器的view属性 self.view = viewA; } @end
支线:设置根视图控制器
setRootViewController方法可将视图控制器的层次结构加入应用窗口。
当程序将某个视图控制器设置为UIWindow对象的rootViewController时,UIWindow对象会将该视图控制器的view作为子视图加入窗口,此外,还会自动调整view的大小,将其设置与窗口的大小相同。
AppDelegate.m文件didFinishLaunchingWithOptions方法中:
//建立一个A控制器对象 ControllerA *ca = [[ControllerA alloc] init]; // 设置根视图 self.window.rootViewController = ca;
支线:创建时间提醒示例
IBAction与IBOutlet
IBAction和IBOutlet关键字告诉Xcode,这些属性或方法之后会在Interface Builder中关联。IBOutlet修饰的字段可以和InterfaceBuilder里相应控件相关联;
IBAction修饰的方法可以和InterfaceBuilder里控件的相应动作相关联。
- (IBAction)addReminder:(id)sender
这里的sender是参数名称,理论上可以指代任何对象,具体看方法的定义。
通常情况下,sender常用于传递消息的发送者,可以理解为触发方法的对象。
加载NIB文件
在ControllerA的指定初始化方法中设置需要加载的NIB文件:(instanceType)initWithNibName:(NSString *) nibName bundle:(NSBundle *) nibBundle;
该方法包含两个参数,分别是指定NIB文件的文件名以及所在的程序包。
AppDelegate.m文件didFinishLaunchingWithOptions方法中:
// 获取指向NSBundle对象的指针,该NSBundle对象代表应用的主程序包 // 向NSBundle发送mainBundle消息可以得到应用的程序包 NSBundle *appBundle = [NSBundle mainBundle]; //告诉初始化方法在appBundle中查找ControllerB.xib文件 ControllerB *cb = [[ControllerB alloc]initWithNibName:@"ControllerB" bundle:appBundle];
在运行时关联加载NIB文件的对象,可在XIB文件中关联File’s Owner:
选中大纲视图的File’s Owner,单机监视面板第三个按钮,打开标识监视面板(identity inspector),将class文本框中的内容改为需要关联的视图控制器(本例为ControllerB)。
接下来关联view和可关联的插座变量和方法。
此时可运行程序。
简化加载方法
初始化加载:
ControllerB *cb = [[ControllerB alloc] init];
此方法会加载与ControllerB同名的xib文件。
【轮命名的重要性】
UITabBarController
UITabBarController对象可以保存一组视图控制器。还会在屏幕底部显示一个标签栏(tab bar),标签栏会有多个标签项(tab item),分别UITabBarController对象所保存的每一个试图控制器。
AppDelegate.m文件didFinishLaunchingWithOptions方法中:
// 创建一个UITabBarController对象 UITabBarController *tabBar = [[UITabBarController alloc] init]; // 将之前创建的两个视图控制器加入该对象 tabBar.viewControllers = @[ca, cb]; // 将UIWindow对象的根视图设置为UITabBarController self.window.rootViewController = tabBar;
设置标签项的标题和图标
首先将图标文件导入Images.xcassets中。
之后在ControllerA.m文件中覆盖指定初始化方法,设置标签项:
- (instanceType)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { //设置标签的标题 self.tabBarItem.title = @"A"; //从图像文件创建一个UIImage对象 //在Retina显示屏上会加载A@2x.png而不是A.png UIImage *i = [UIImage imageNamed:@"A.png"]; //将UIImage对象赋给标签项的image属性 self.tabBarItem.image = i; } return self; }
同理设置B的。
添加本地通知 (Local Notification)
首先创建一个UILocalNotification对象并设置显示内容和时间,然后调用UIApplication单例对象的scheduleLocalNotification方式注册。- (IBAction)addReminder:(id)sender { NSDate *date = self.datePicker.date; NSLog(@"Setting a remainder for %@", date); UILocalNotification *note = [[UILocalNotification alloc] init]; note.alertBody = @"Hypnotize me!"; note.fireDate = date; [[UIApplication sharedApplication] scheduleLocalNotification:note]; }
访问视图
通常情况下要在用户看到XIB文件中创建的视图之前,对它们做一些额外的初始化工作。在以下两个方法中访问XIB文件中的视图:
用于确认视图已加载的viewDidLoad,该方法会在视图控制器加载完NIB文件之后被调用。
viewWillAppear,该方法会在试图控制器的view添加到应用窗口之前被调用。
两个方法的区别是,如果只需要在应用启动后设置一次试图对象,就选择viewDidLoad,如果用户每次看到试图控制器的view时都需要设置,则选择viewWillAppear。
相关文章推荐
- IOS开发学习笔记(导航控制器,视图控制器,模态)
- 学校学习ios教程笔记,第十二节初识ios控制器中的标签视图控制器
- iOS开发学习笔记② - 视图
- iOS开发学习笔记——分段视图(UISegmentedControl)
- iOS开发学习笔记——控制器(UIViewController)
- iOS开发学习笔记——导航控制器1(UINavigationController)
- iOS开发基础学习笔记——导航控制器2->导航栏(UINavigationBar)/工具栏(toolBar)/导航元素按钮(UINavigationItem)
- ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习
- ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习
- [转]ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习
- 暑期留校之iOS学习笔记之视图控制器(UI)
- iOS开发笔记之ViewController视图控制器间的跳转
- 斯坦福大学公开课 iOS应用开发教程学习笔记(第四课) Views 视图
- 【IOS学习】IOS开发之视图和视图控制器
- ios学习笔记(六)视图控制器
- ios学习笔记(六)视图控制器
- ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习
- ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习
- iOS学习笔记-003.视图 & 视图控制器
- iOS学习笔记之视图控制器的生命周期、多线程、网络连接等