视图控制器

2016-11-22  本文已影响0人  Grt婷

视图控制器

1. 为什么要有视图控制器

2. 视图控制器的生命周期

```c
1、 alloc                                   创建对象,分配空间

2、init (initWithNibName) 初始化对象,初始化数据
3、loadView 从nib载入视图 ,通常这 一步不需要去干涉。除非你没有使用xib文件创建视图
4、viewDidLoad 载入完成,可以进行自定义数据以及动态创建其他控件
5、viewWillAppear 视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
6、viewDidAppear 视图已在屏幕上渲染完成
当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反
1、viewWillDisappear 视图将被从屏幕上移除之前执行
2、viewDidDisappear 视图已经被从屏幕上移除,用户看不到这个视图了
3、deainit 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放

```

* 当我们创建一个UIViewController类的对象时,通常系统会生成几个默认的方法,这些方法大多与视图的调用有关,但是在视图调用时,这些方法的调用顺序如何,需要整理下。

通常上述方法包括如下几种,这些方法都是UIViewController类的方法:

```c
-(void)viewDidLoad;
-(void)viewDidUnload;
-(void)viewWillAppear:(BOOL)animated;
-(void)viewDidAppear:(BOOL)animated;
-(void)viewWillDisappear:(BOOL)animated;
-(void)viewDidDisappear:(BOOL)animated;
```

3. 生命周期的每个方法干什么用

下面介绍下APP在运行时的调用顺序。

4.模态推出

  //模态推出下一个界面,一般用于注册
        let vc = SecondViewController()
        //1.要推出的下一个控制器
        //2.是否有动画
        //3.推出完成之后回掉
        self.present(vc,animated: true){
            
        }

5. view是懒加载的

6. 属性传值

•    传值者->茶水间管理员,负责管理各种饮品
•    接收者->到茶水间找水喝的人
  •   属性->茶水间的杯子
  •   值->水

7. 实例

实现点击按钮,进入下一个视图,再点击返回上一个视图

import UIKit

class ViewController: UIViewController {
//   override init(nibName nibNameOrNil : String? ,bundle nibBundleOrNil:Bundle?) {
//    //1.加载的xib文件
//    //2.bundle
//    super.init(nibName: nibNameOrNil , bundle: nibBundleOrNil)
//        
//    }
//    required init?(coder aDecoder:NSCoder){
//        fatalError("init(coder:) has not been implemented")
//    }
    //加载view
    override func loadView() {
        super.loadView()
        //替换当前控制器的view
//        let imageV = UIImageView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))
//        self.view = imageV
    }
    //加载相关资源
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor=UIColor.red
        //视图控制器
        //UIControl子类
        //手势
        let btn = UIButton(type: .system)
        btn.frame=CGRect(x: 100, y: 100, width: 50, height: 40)
        btn.addTarget(self, action: #selector(btnAction(btn:)), for: .touchUpInside)
        btn.setTitle("登录", for: .normal)
        self.view.addSubview(btn)
    }
    func btnAction(btn:UIButton)  {
        //模态推出下一个界面,一般用于注册
        let vc = SecondViewController()
        //1.要推出的下一个控制器
        //2.是否有动画
        //3.推出完成之后回掉
        self.present(vc,animated: true){
            
        }
        
    }
     //视图将要显示在频幕上
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    }
    //显示在频幕上
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
    }
    //视图将要从频幕上消失
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
    }
    // 控制器被销毁
    deinit {
        
    }
    //接收到内存警告
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

import UIKit

class SecondViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor=UIColor.white
        let btn = UIButton(type: .system)
        btn.frame=CGRect(x: 100, y: 100, width: 50, height: 40)
        btn.addTarget(self, action: #selector(btnAction(btn:)), for: .touchUpInside)
        btn.setTitle("登录", for: .normal)
        self.view.addSubview(btn)
    }
    func btnAction(btn:UIButton)  {
        //从前页面回收回去
       self.dismiss(animated: true, completion: nil)
     }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    

    
}

上一篇 下一篇

猜你喜欢

热点阅读