UI基础__UIWindow/UIViewController
2016-02-18 09:20
417 查看
// 让窗口成为主窗口并显示出来 [self.window2 makeKeyAndVisible]; // 成为主窗口 [self.window1 makeKeyWindow]; // 创建控制器 // ************************第一种方式:通过代码创建 // UIViewController *vc = [[UIViewController alloc] init]; // vc.view.backgroundColor = [UIColor orangeColor]; //********************** 第二种方式:通过xib创建 // HMViewController *vc = [[HMViewController alloc] initWithNibName:@"HMView" bundle:nil]; //******************* 第三种方式:通过stroyboard创建控制器 // 如果没有在info.plist文件中配置最主要的storyboard,程序不会自动加载任何项目中存在的storyboard文件。如果存在多个stroyboard,则会加载最主要的storyboard. // 加载sb // 下面代码仅仅是将stroyboard加载到内存中了,并没有创建stroyboard中的控制器。 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"test" bundle:nil]; // 创建箭头指向的控制器 // UIViewController *vc =[sb instantiateInitialViewController]; // 根据标示创建控制器 UIViewController *vc =[sb instantiateViewControllerWithIdentifier:@"grayVc"]; // 将控制器赋值给窗口的根控制器 self.window.rootViewController = vc;
//***************************** 创建导航控制器 / 创建子控制器 HMOneViewController *one = [[HMOneViewController alloc] init]; // 创建导航控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:one]; // 创建子控制器的方法 // 导航控制器管理子控制器是以栈的形式来管理。栈的特点:先进后出 HMOneViewController *vc1 = [[HMOneViewController alloc] init]; 1、 [nav addChildViewController:vc1]; 2、 [nav pushViewController:vc1 animated:YES];
//回到首页 - (IBAction)backHome { // 回到上一个控制器(将当前栈顶控制器出栈) // [self.navigationController popViewControllerAnimated:YES]; // 将除根控制器以为的所有控制器出栈 // NSArray *viewControllers = [self.navigationController popToRootViewControllerAnimated:YES]; // NSLog(@"%@",viewControllers); // HMOneViewController *oneVc = [[HMOneViewController alloc] init]; // 回到指定的控制器界面 // 传人的控制器必须是已经添加到导航控制器中。 [self.navigationController popToViewController:self.navigationController.viewControllers[0] animated:YES]; } // 设置标题 self.navigationItem.title = @"控制器1控制器制"; // 设置下一个控制器返回按钮的标题 self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStyleDone target:nil action:nil]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:nil action:nil]; // leftBarButtonItem属性覆盖系统默认的返回按钮 self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(back)]; } // titleView优先级高于title self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"menu_icon_bulb"]]; /** * 返回传入veiw的所有层级结构 * * @param view 需要获取层级结构的view * * @return 字符串 */ * (NSString *)digView:(UIView *)view { if ([view isKindOfClass:[UITableViewCell class]]) return @""; // 1.初始化 NSMutableString *xml = [NSMutableString string]; // 2.标签开头 [xml appendFormat:@"<%@ frame=\"%@\"", view.class, NSStringFromCGRect(view.frame)]; if (!CGPointEqualToPoint(view.bounds.origin, CGPointZero)) { [xml appendFormat:@" bounds=\"%@\"", NSStringFromCGRect(view.bounds)]; } if ([view isKindOfClass:[UIScrollView class]]) { UIScrollView *scroll = (UIScrollView *)view; if (!UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsetsZero, scroll.contentInset)) { [xml appendFormat:@" contentInset=\"%@\"", NSStringFromUIEdgeInsets(scroll.contentInset)]; } } // 3.判断是否要结束 if (view.subviews.count == 0) { [xml appendString:@" />"]; return xml; } else { [xml appendString:@">"]; } // 4.遍历所有的子控件 for (UIView *child in view.subviews) { NSString *childXml = [self digView:child]; [xml appendString:childXml]; } // 5.标签结尾 [xml appendFormat:@"</%@>", view.class]; return xml; }
控制器view的生命周期方法
注: 重写时一定要调用父类的 /** * 当控制器的view即将要显示时调用 */ * (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; NSLog(@"%@---%@", self.class ,@"viewWillAppear"); } /** * 当控制器的view已经显示完毕调用 */ * (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // NSLog(@"%@---%@", self.class ,@"viewDidAppear"); // NSLog(@"viewDidAppear -- %@",self.view.window); } /** * 当控制器的view加载完毕调用 */ * (void)viewDidLoad { [super viewDidLoad]; NSLog(@"%@--%@", self.class ,@"viewDidLoad"); } /** * 当控制器的view即将要消失时调用 */ * (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; NSLog(@"%@---%@", self.class ,@"viewWillDisappear"); } /** * 当控制器的view已经消失完毕调用 */ * (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; NSLog(@"%@---%@", self.class ,@"viewDidDisappear"); } -(void)dealloc { NSLog(@"%@---%s", self.class ,__FUNCTION__); }
跟内存相关
/** * 当控制器view即将要卸载时调用 */ - (void)viewWillUnload { [super viewWillUnload]; NSLog(@"%@---%s", self.class ,__FUNCTION__); self.view = nil; } /** * 当控制器view卸载完毕时调用 */ - (void)viewDidUnload { [super viewDidUnload]; NSLog(@"%@---%s", self.class ,__FUNCTION__); // self.provices = nil; } /** * 当控制器收到内存警告时调用 */ - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; NSLog(@"%@--didReceiveMemoryWarning",self.class); }
相关文章推荐
- Linux下XWindow图形界面的基本概念
- 判断window.onload是否多次使用的方法
- Javascript中封装window.open解决不兼容问题
- jquery自定义插件开发之window的实现过程
- window.returnValue使用方法示例介绍
- javascript类型系统 Window对象学习笔记
- window系统的Rsync同步实战分析第1/2页
- JavaScript中window、doucment、body的解释
- JavaScript的document对象和window对象详解
- window.onload和$(function(){})的区别介绍
- JavaScript中的Window窗口对象
- window.opener用法和用途实例介绍
- window.open()详解及浏览器兼容性问题示例探讨
- javascript Window及document对象详细整理
- js中window.open打开一个新的页面
- JS教程:window.location使用方法的区别介绍
- Javascript 陷阱 window全局对象
- 判断对象是否Window的实现代码
- javascript表单验证和Window详解
- javascript中的window.location.search方法简介