您的位置:首页 > 产品设计 > UI/UE

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  window viewContro