initWithNibName:bundle:初始化方法为指定的初始化方法,不管调用该类的哪一个初始化方法,该方法都会被调用
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
NSLog(@"%s",__FUNCTION__);
//self.view;(如果提前访问view,会影响到程序的一个执行顺序)
}
return self;
}
//当访问 控制器的view时,如果view为空,还没有创建,会调用loadview方法,为试图控制器创建view
//在执行完loadView之后,就会立即执行viewdidload
//父类对loadview方法的实现,是创建一个和屏幕一样大小的view
- (void)loadView
{
[super loadView];//父类对loadView方法的实现就是创建了一个UIView类型的对象,并且作为控制器的view(根视图)
NSLog(@"%s",__FUNCTION__);
//将loginView视图对象指定为视图控制器的view
LoginView *lgview = [[LoginView alloc]initWithFrame:CGRectZero];
[lgview.button addTarget:self action:@selector(login:) forControlEvents:UIControlEventTouchUpInside];
//将lgView制定为视图控制器的view
self.view = lgview;
[lgview release];
//设置textfield代理
lgview.field.delegate = self;
}
- (void)login:(UIButton *)button
{
NSLog(@"死了");
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
视图控制器用来分担Appdalegate的任务,管理子视图,所以也需要一个类似于containerView的视图来管理子视图,所以对于视图控制器自身就自带一个view,大小和屏幕大小相同,通过self.view访问控制器的view
视图控制器不是视图,在屏幕上是看不到的,只要在屏幕上看到东西,都是视图
当视图控制器的视图加载完成后触发viewdidload(只要loadview方法被调用之后,就会立即调用viewdidload)
只是视图view创建完毕,但是此时视图还没有添加到父视图上
- (void)viewDidLoad
{
[super viewDidLoad];
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(120, 100, 100, 40)];
label.backgroundColor = [UIColor grayColor];
[self.view addSubview:label];
[label release];
UITextField *field = [[UITextField alloc]initWithFrame:CGRectMake(120, 180, 100, 40)];
field.backgroundColor = [UIColor greenColor];
[self.view addSubview:field];
//field.borderStyle =
field.layer.cornerRadius = 10;
[field release];
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
button.backgroundColor = [UIColor blueColor];
[button setTitle:@"点击" forState:UIControlStateNormal];
button.layer.cornerRadius = 10;
[self.view addSubview:button];
// Do any additional setup after loading the view.
//self.view.backgroundColor = [UIColor greenColor];
NSLog(@"%s",__FUNCTION__);
}
当视图控制器的view布局自身的子视图时,该方法就会被触发(视图控制器的view将要显示上边的子视图时触发)(该方法在视图控制器的view所在的类里)
-(void)viewWillLayoutSubviews
{
当重写父类方法实现时,如果不知道父类是对该方法如何实现的,当自己在实现是,先调用父类对该方法的实现
[super viewWillLayoutSubviews];
NSLog(@"%@",self.view.superview);
self.view.frame = CGRectMake(0, 200, 300, 400);
}
当应用程序收到内存警告(当内存吃紧,内存不足时)时触发.释放一些暂时不使用(该资源已经分配,但暂时没使用)的系统资源,供当前程序运行
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
//NSLog(@"%@",self.view.superview);
// Dispose of any resources that can be recreated.
//NSLog(@"%s",__FUNCTION__);
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
//让键盘回收
//self.view
LoginView *lgview = (LoginView *)self.view;
[lgview.field resignFirstResponder];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
//当收到内存警告时,移除当前未在屏幕上的显示的视图
//判断是否可以安全的移除视图控制器的view
//1判断当前视图控制器的view是否在屏幕上显示self.view.window = nil(是否为空)
//self.view.window
//2判断视图控制器的view是否已经成功加载
if (!self.view.window && [self isViewLoaded]) {
//这时可以安全的移除
NSLog(@"%@",self.view.window);
self.view = nil;
//等价于[_view release] ,_view = nil(set方法)
}
//NSLog(@"%@",self.view.window);
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
LoginView *lgView = (LoginView *)self.view;
[lgView.tf resignFirstResponder];
}
#pragma mark - UIViewControllerRotation
//用来设置当前视图控制器是否支持旋转
- (BOOL)shouldAutorotate{
return YES;
}
- (void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
NSLog(@"呵呵");
}
//设置屏幕旋转的方法,系统默认支持三个方法方向,竖直方法(正),左横屏,和右横屏
- (NSUInteger)supportedInterfaceOrientations{
//竖直方法的正方向
//return UIInterfaceOrientationMaskPortrait;
//左横屏旋转
//return UIInterfaceOrientationMaskLandscapeRight;
//
//return UIInterfaceOrientationMaskLandscape;
//随着屏幕旋转
return UIInterfaceOrientationMaskAll;
}
//当屏幕将要旋转时触发
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
//当屏幕将要旋转时,需要暂停音乐播放,视频播放,关闭用户交互
NSLog(@"%s",__FUNCTION__);
}
//当屏幕旋转时触发
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
//在该方法中,如果想要在屏幕旋转时,添加自己的动画,在该方法中实现
NSLog(@"%s",__FUNCTION__);
}
//当屏幕旋转之后触发
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
//旋转之后,继续播放音乐,继续播放视频,打开用户交互
NSLog(@"%s",__FUNCTION__);
}
//当屏幕每次旋转时,都会触发的视图的重新布局方法,为该视图的子视图重新布局
- (void) layoutSubviews
{
[super layoutSubviews];
NSLog(@"layoutsubviews");
//对子视图重新布局
//根据屏幕旋转的方向决定布局的样式
//1.获取屏幕旋转的的方向
switch ([UIApplication sharedApplication].statusBarOrientation) {
case UIInterfaceOrientationPortrait:
NSLog(@"竖直方向(正)");
_btn.frame = CGRectMake(50, 200, 100, 40);
break;
case UIInterfaceOrientationPortraitUpsideDown :
NSLog(@"竖直反方向");
_btn.frame = CGRectMake(50, 200, 100, 40);
break;
case UIInterfaceOrientationLandscapeLeft :
NSLog(@"左方向");
_btn.frame = CGRectMake(320, 100, 60, 40);
break;
case UIInterfaceOrientationLandscapeRight:
NSLog(@"右方向");
//设置横屏时视图显示的样式
_btn.frame = CGRectMake(320, 100, 60, 40);
break;
default:
break;
}
}
- (void)dealloc{
[_label release];
[_tf release];
[_btn release];
[super dealloc];
}
//点击空白处键盘回收实现
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
[_tf resignFirstResponder];
}