视图控制器的作用

视图控制器概述

UIViewController:视图控制器。
控制视图显⽰示,响应事件。
分担AppDelegate的⼯工作。
实现模块独⽴立,提⾼高复⽤用性。

视图控制器功能

控制视图⼤大⼩小变换、布局视图、响应事件。
检测以及处理内存警告。
检测以及处理屏幕旋转。
检测视图的切换

自定义视图类

UIViewController⾃自带⼀一个空的view,与需求不符合。
视图控制器只负责控制视图显⽰示,响应事件。

如何设置

⾃自定义视图类继承UIView。在初始化⽅方法中添加⼦子视图控件。
重写controller的loadView⽅方法。创建⾃自定义视图对象,并指定为controller 的view。
将⼦子视图控件对象设置为⾃自定义视图类的属性,在viewDidLoad⽅方法中进 ⾏行设置:添加action、设置delegate等等。
在controller中添加按钮点击事件实现和代理⽅方法的实现。

检测屏幕旋转

视图控制器本⾝身能检测到屏幕的旋转,如果要处理屏幕旋转,需要重写⼏几个
⽅方法:
1. supportedInterfaceOrientations(设置设备⽀支持旋转的⽅方向)
2. willRotateToInterfaceOrientation:duration:(暂停⾳音乐、关闭视图交互等)
3. willAnimateRotationToInterfaceOrientation:duration:(添加⾃自定义动画 等)
4. didRotateFromInterfaceOrientation:(播放⾳音乐、打开视图交互等)。

视图控制

注意视图控制器会⾃自动调整view的⼤大⼩小以适应屏幕旋转,bounds
被修改,触发view的layoutSubviews⽅方法。
view重写layoutSubviews⽅方法,根据设备⽅方向,重新布局。
[UIApplication shareApplication].statusBarOrientation提供设备 当前⽅方向。

容器类视图控制器

常用方法

self.view显⽰示:viewWillAppear: 和 viewDidAppear:
self.view消失:viewWillDisappear: 和 viewDidDisappear:
当self.view添加到⽗父视图上时,执⾏行appear⽅方法: 当self.view从⽗父视 图上移除时,执⾏行disappear⽅方法。

演示执行顺序

定义FirstViewController、SecondViewController类,first作为window 的根视图控制器。
将SecondViewController的view添加到FirstViewController的view上。 将SecondViewController的view移除。 查看SecondViewController中4个⽅方法的执⾏行顺序。

import “LoginViewViewController.h”
import “LoginWiew.h”

@interface LoginViewViewController ()
@property(nonatomic ,retain) LoginWiew *loginView;
@end

@implementation LoginViewViewController

  • (void)dealloc
    {
    [_loginView release];
    [super dealloc];
    }

//如果重写了loadView,系统就不创建自带的view了。
//指定(创建)当前视图控制器直接管理的自定义视图
-(void)loadView
{
self.loginView = [[LoginWiew alloc]initWithFrame:[UIScreen mainScreen].bounds];

self.view = _loginView;
[_loginView release];

}

//创建或初始化视图控制器直接管理的那个自定义视图上得所有子视图
//还会做一些其他的操作:设置代理,给button添加事件,网络请求,数据解析·········
- (void)viewDidLoad {
[super viewDidLoad];

//设置代理
[(LoginWiew *)self.view username].textField.delegate = self;



//给button添加事件
[_loginView.button addTarget:self action:@selector(clickButton) forControlEvents:UIControlEventTouchUpInside];



self.view.backgroundColor = [UIColor yellowColor];

}

-(void)clickButton
{
NSLog(@”button被点击了”);
}

  • (BOOL)textFieldShouldReturn:(UITextField *)textField
    {
    [textField resignFirstResponder];
    return YES;
    }// called when ‘return’ key pressed. return NO to ignore.

pragma mark —————-检测屏幕旋转

-(NSUInteger)supportedInterfaceOrientations
{

return UIInterfaceOrientationMaskAll;

}

//屏幕将要旋转,(音乐或视频暂停,视图的交互关掉)
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{

}

//屏幕旋转完成:(音乐或视频取消暂停,视图的交互打开

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{

}

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

@end


给控制器自定视图。

import “LoginWiew.h”

import “LTView.h”

@implementation LoginWiew

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/

  • (instancetype)initWithFrame:(CGRect)frame
    {
    self = [super initWithFrame:frame];
    if (self) {
    self.username = [[LTView alloc]initWithFrame:CGRectMake(50, 100, 240, 30) andLabelText:@”用户名” andPlaceHolder:@”电话号码” andDelegate:nil];

    [self addSubview:_username];
    [_username release];
    
    self.button = [UIButton buttonWithType:UIButtonTypeCustom];
    self.button.backgroundColor  = [UIColor blueColor];
    
    [_button setTitle:@"登陆" forState:UIControlStateNormal];
    
    _button.frame = CGRectMake(50, 200, 40, 30);
    
    [self addSubview:_button];
    

    }
    return self;
    }

//获取当前屏幕的方向

//重新布局
-(void)layoutSubviews
{
//判断当前是左横屏或者是右横屏

if ([UIApplication sharedApplication].statusBarOrientation == UIDeviceOrientationLandscapeRight||UIDeviceOrientationLandscapeLeft == [UIApplication sharedApplication].statusBarOrientation) {

    self.username.frame = CGRectMake(150, 100, 240, 30);
}else
{
    self.username.frame = CGRectMake(50, 100, 240, 30);
}

}

@end
“`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Thymeleaf视图控制器是指在Spring MVC应用程序中使用Thymeleaf作为视图解析器时,可以通过配置视图控制器来简化处理程序和视图之间的映射。 具体来说,Thymeleaf视图控制器可以将请求直接映射到Thymeleaf模板,而无需编写控制器代码。这样可以大大简化应用程序的配置和开发过程。 在Spring MVC应用程序中配置Thymeleaf视图控制器需要在配置类中添加以下代码: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/home").setViewName("home"); registry.addViewController("/login").setViewName("login"); } } ``` 在上面的示例中,我们将“/home”请求映射到“home”模板,将“/login”请求映射到“login”模板。这样,当用户访问“/home”时,将直接渲染“home”模板,而无需使用控制器来处理请求。 ### 回答2: Thymeleaf是一个服务器端Java模板引擎,用于构建web应用程序的视图层。它遵循面向模板的设计思想,将模板和数据进行分离,通过填充模板来生成最终的HTML页面。 视图控制器是一个用于处理请求和返回响应的组件。在Thymeleaf中,视图控制器用于将请求映射到相应的视图,并处理视图中需要的数据。它负责接收来自用户的请求并确定需要显示的页面,然后将数据传递给该页面进行处理并返回给用户。 Thymeleaf视图控制器的主要作用是: 1. 路径映射:根据请求的URL路径将请求映射到对应的视图。通过在控制器中配置路径和对应的视图模板,Thymeleaf可以根据URL路径自动寻找匹配的视图,并将请求的数据填充到视图中。 2. 数据传递:将请求中的数据传递给视图进行处理。视图控制器可以从请求中获取参数、表单数据等信息,并将这些数据传递给视图进行处理。这样可以灵活地在视图中使用这些数据,并展示给用户。 3. 视图渲染:将处理后的数据填充到视图模板中,并将最终的HTML页面返回给用户。Thymeleaf视图控制器负责将数据填充到视图中的相应位置,并将处理后的HTML页面返回给用户。这样用户就可以在浏览器中看到经过处理的页面。 总之,Thymeleaf视图控制器在web应用程序中起着重要的作用,它能够根据请求的URL路径映射到相应的视图,并且能够处理传递给视图的数据。它使得开发人员可以更方便地构建和管理视图层,提高了开发效率和代码的可维护性。 ### 回答3: Thymeleaf是一种模板引擎,用于在后端和前端之间处理页面的渲染和数据绑定。它支持HTML,XML,JavaScript,CSS等各种页面,并且可以与Spring框架无缝集成。Thymeleaf作为视图控制器,主要负责处理请求并将结果返回给用户。 Thymeleaf视图控制器作用是将请求映射到相应的处理方法,并根据处理方法的返回结果选择合适的视图进行渲染。在Spring MVC中,我们可以通过配置Thymeleaf视图控制器来指定处理方法与视图的映射关系。 Thymeleaf视图控制器有以下几个主要的配置选项: 1. Url映射:我们可以定义一个或多个Url的模式,将其映射到特定的处理方法。例如,可以将"/home"映射到HomeController中的home方法。 2. 视图名称:对于处理方法返回的结果,我们可以指定要渲染的视图的名称。这个名称通常与页面的逻辑地址对应。 3. 视图前缀和后缀:Thymeleaf视图控制器还可以配置视图的前缀和后缀。这些前缀和后缀会与视图名称组合在一起,以确定最终的视图文件。 4. 视图解析器:Thymeleaf视图控制器需要使用视图解析器来解析视图的名称和位置。我们可以配置一个或多个视图解析器,以便根据不同的策略来查找和渲染视图。 通过配置Thymeleaf视图控制器,我们可以轻松地将请求映射到相应的处理方法,并渲染正确的视图返回给用户。Thymeleaf简化了开发人员在后端和前端之间的交互,提高了开发效率,同时也使页面的渲染和数据绑定变得更加灵活和可定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值