UIViewContrller 有三种创建方式:
1.通过alloc init直接创建。
2.通过故事版创建。
3.通过xib文件描述。
这是appDelegate.m的内容
//window的颜色是绿色 self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor greenColor]; /** 第一种:直接alloc init 创建控制器,控制器会自动创建一个view,上面什么也没有 */ // XBViewController * vc = [[XBViewController alloc]init]; /** * 第二种:通过故事版创建控制器,这时候控制器的视图就是故事版上面视图描述的那样 故事版上面的控制器要和本类进行关联 */ UIStoryboard * storyBoard = [UIStoryboard storyboardWithName:@"XBVC" bundle:nil]; XBViewController *vc = [storyBoard instantiateViewControllerWithIdentifier:@"XBVC"]; self.window.rootViewController = vc ;//给根控制器赋值 /** 第三种:通过xib文件的方式创建 步骤: 1.xib的file owner要设置成本类,并且需要手动 2.进行将本类的view属性个xib上的视图进行关联 */ XBViewController * vc = [[XBViewController alloc]initWithNibName:@"XBViewController" bundle:nil]; /*当所在的xib的名字和视图控制器本身名字一致的时候直接调用init也会通过 默认的xib进行创建 */ XBViewController * vc = [[XBViewController alloc]init]; /* 当没有和控制器的文件名字一样的xib文件,若有XBView这样类型也是可以的 */ XBViewController * vc = [[XBViewController alloc]init]; self.window.rootViewController = vc ; [self.window makeKeyAndVisible];//呈现根控制器
XBViewController.m
/** * loadView方法里用来建立自己需要的视图,当需要进行延长加载视图的时候可以在这里自己 定义。只要重写了这个方法,不论控制器是从故事版还是xib创建。统统无效。 这个方法出现在viewDidLoad前,在这里self.view 是空的,需要自己创建 而且必须创建,否则会陷入死循环!!,除非调用了[super loadView]; 该方法结束后,必须保证self.view不为空,否则会自己调用自己 */ - (void)loadView { // [super loadView]; //不写这个代码而且不为self.view 创建对象会死机 //// self.view = [[UIView alloc]init]; // self.view.backgroundColor = [UIColor blueColor]; // UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(20, 300, 300, 30)]; // [email protected]"现在的视图是loadView里面创建的"; // [self.view addSubview:label]; NSLog(@"loadView"); } //视图加载完成后会调用这个方法,不论是通过系统自己生成的默认的view的方式,还是故事版,xib。 - (void)viewDidLoad { [super viewDidLoad]; UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(20, 100, 250, 30)]; label.text=@"这里viewDidLoad里面的view"; [self.view addSubview:label]; NSLog(@"视图加载完成"); }
控制器视图的创建方式:
控制器的生命周期图
时间: 2024-12-31 17:01:32