// 让窗口成为主窗口并显示出来
[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即将要显示时调用
*/
* (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);
}