MVC
MVC是一种设计模式
好处: 让视图(View)可以复用
应用:
1.视图层(view) 只写视图的布局
2.数据模型层(model) 只写数据的结构(只写NS开头的)
3.控制器(controller) 负责逻辑部分(例如从model里取数据 然后去更改视图的显示)
MVC把工程中的代码模块化(降低耦合度) 尽量让视图部分的代码可以复用
一般一个视图控制器控制一个页面
视图控制器
如何为window创建根视图控制器
视图控制器会自带一个view 如果要更改这个view 就必须重写loadView方法
在.m
中实现这个方法:
// 这个方法是加载视图的 并且加载的是自带的那个view
- (void)loadView
{
// 用上午的loginView替换控制器的view (当然要引入头文件)
LoginView *loginView = [[LoginView alloc] initWithFrame:[UIScreen mainScreen].bounds];
loginView.tag = 10000;
// 帮系统给self.view 赋值
self.view = loginView;
[loginView release];
}
然后在AppDelegate.m
引入RootViewController.h
头文件
为self.window.rootViewController
设置根视图控制器
当然需要先创建根视图控制器
RootViewController *rootVC = [[RootViewController alloc] init];
最后进行赋值:
self.window.rootViewController = rootVC;
[rootVC release];
控制器的view加载完后
在控制器view加载完后 可以对view上的控件进行设置
// 视图已经加载完成
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// 更改一下自身view的颜色
self.view.backgroundColor = [UIColor grayColor];
// 控制器写逻辑部分
// 给button添加一个点击方法
// 由于self.view为UIView类型 要想使用子类的属性必须要将UIView类型转化为LoginView类型
LoginView *loginView = (LoginView *)self.view;
[loginView.loginButton addTarget:self action:@selector(loginButtonClick:) forControlEvents:UIControlEventTouchUpInside];
// 给Textfield设置代理
loginView.userNameLTView.textField.delegate = self;
loginView.passWordLTView.textField.delegate = self;
}
// loginButton的点击方法
- (void)loginButtonClick:(UIButton *)button
{
NSLog(@"我是登陆按钮");
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}