视图控制器

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];

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值