UI_03 ?定义视图、视图控制器

?、?定义label-textField视图

自定义LTView类,封装UILabel与UITextField,实现快速创建以下类型的视图

**** 使用UIView子类实现 ****

LTView.h

#import <UIKit/UIKit.h>

@interface LTView : UIView

@property (nonatomic, retain)UILabel * label;

@property (nonatomic, retain)UITextField * textField;

- (instancetype)initWithFrame:(CGRect)frame labelText:(NSString *)text placeholder:(NSString *)placeholder delegate:(id<UITextFieldDelegate>)delegate;

@end

LTView.m

#import "LTView.h"
#define fWidth frame.size.width
#define fHeight frame.size.height

@implementation LTView

- (instancetype)initWithFrame:(CGRect)frame labelText:(NSString *)text placeholder:(NSString *)placeholder delegate:(id<UITextFieldDelegate>)delegate
{
    self = [super initWithFrame:frame];
    if (self) {
        UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, fWidth/4, fHeight)];
        label.text = text;
        [self addSubview:label];
        [label release];
       
        UITextField * textField = [[UITextField alloc] initWithFrame:CGRectMake(fWidth/4, 0, fWidth/4*3, fHeight)];
        textField.borderStyle = UITextBorderStyleRoundedRect;
        textField.delegate = delegate;
        [self addSubview:textField];
        [textField release];
       
        self.label = label;
        self.textField = textField;
       
    }
    return self;
}

@end

**** 使用类目实现 ****

UIView+LTView.h

#import <UIKit/UIKit.h>

@interface UIView (LTView)

- (instancetype)initWithFrame:(CGRect)frame labelText:(NSString *)text placeholder:(NSString *)placeholder delegate:(id<UITextFieldDelegate>)delegate;

@end

UIView+LTView.m

#import "UIView+LTView.h"
#define fWidth frame.size.width
#define fHeight frame.size.height

@implementation UIView (LTView)

- (instancetype)initWithFrame:(CGRect)frame labelText:(NSString *)text placeholder:(NSString *)placeholder delegate:(id<UITextFieldDelegate>)delegate
{

self = [self initWithFrame:frame];

if (self) {

UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, fWidth/4, fHeight)];
        label.text = text;
        [self addSubview:label];
        [label release];
       
        UITextField * textField = [[UITextField alloc] initWithFrame:CGRectMake(fWidth/4, 0, fWidth/4*3, fHeight)];
        textField.borderStyle = UITextBorderStyleRoundedRect;
        textField.delegate = delegate;
        [self addSubview:textField];
        [textField release];
       
       
    }
    return self;
}

@end



?、视图控制器

1、视图控制器概述

1.1.UIViewController:

所有视图控制器的父类

1.2.视图控制器的功能:

a.控制视图

b.检测与处理内存警告

c.检测屏幕旋转

d.管理视图控制器

1.3.关于self.view

每一个视图控制器都自带一个view,其大小和window一样

2、MVC概述

  • UIViewController是MVC设计模式的核?。
  • MVC是?个框架级的设计模式。
  • M是Model,主要?于建?数据模型(即数据的结构)
  • V是View,我们能看到的所有控件都是view,view主要的功能是展?数据。
  • C是控制器,主要是控制M和V的通信。

3、使用视图控制器

新建Cocoa Touch Class,指定父类为UIViewController。

重写方法:

- (void)loadView; // This is where subclasses should create their custom view hierarchy if they aren‘t using a nib. Should never be called directly.

作用:

指定self.view为特定视图

注意:

如果重写loadView,则self.view=nil,因此必须指定给self.view一个视图,否则会因死循环崩溃

如果不重写loadView,系统会自动创建一个view

view的getter方法造成死循环:

- (UIView*)view{

if(self.view==nil)
     { 
        loadView();

}

}

- (void)viewDidLoad; //Do any additional setup after loading the view.

作用:

创建或者初始化self.view(视图控制器的视图)以及其子视图,

4、视图生命周期

- (void)loadView;

- (void)viewDidLoad;
- (void)viewWillAppear:(BOOL)animated;
- (void)viewDidAppear:(BOOL)animated;
- (void)viewWillDisappear:(BOOL)animated;

- (void)viewDidDisappear:(BOOL)animated;



三、检测屏幕旋转

视图控制器本?能检测到屏幕的旋转,如果要处理屏幕旋转,需要重写?个 ?法

1、处理屏幕旋转

//设置设备支持的方向,默认支持所有设置中开启的方向,若设置如此,则支持正、左、右三个方向,在开发中不会使用Upside Down

- (NSUInteger)supportedInterfaceOrientations

{

return UIInterfaceOrientationMaskPortrait;  //只支持垂直正方向

}
//屏幕将要旋转(弃用):(应用:音乐或视频暂停;视图的交互关闭)
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{}
//
- (void)willAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{}
//屏幕旋转完毕(弃用):(应用:音乐或视频取消暂停;视图的交互打开)

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{}

图1 设置设备支持的方向

2、视图处理

视图控制器会?动调整view的??以适应屏幕旋转,当设备方向改变时,bounds被修改,触发view的layoutSubviews?法。重写view中的layoutSubviews方法,重新布局。

//获取当前屏幕的方向

#define Orientation [UIApplication sharedApplication].statusBarOrientation

- (void)layoutSubviews
{
    //判断当前设备的方向
    if (Orientation == UIDeviceOrientationLandscapeLeft || Orientation == UIDeviceOrientationLandscapeRight) {
        self.username.frame = CGRectMake(200, 100, 240, 30);
    } else {
        self.username.frame = CGRectMake(50, 100, 240, 30);
    }

}

注:由于开发中更多地使用autolayout、sizeclasses,故在此不做过多说明



四、处理内存警告

当内存不够用时,系统发出内存警告,从AppDelegate.m中的- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application{}开始,依次向视图控制器回收内存。以下为视图控制器中的示例:

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

//如果视图控制器管理的view被加载过(创建),并且没有显示在window上,则把view销毁

//self.view.window等于nil<==>该视图没有被显示
    if ([self isViewLoaded] && !self.view.window) {
        self.view = nil;
    }

}



五、容器视图控制器

图片摘自:原文链接        译文链接

ListAndTree

NavLayout

PanelLayout

SplitViewLayout

MenuViewHierarchy

TabBarHierarchy

时间: 2024-08-08 01:26:25

UI_03 ?定义视图、视图控制器的相关文章

OPEN(SAP) UI5 学习入门系列之三:MVC (下) - 视图与控制器

继续来学习UI5的MVC模型吧,这次我们来探讨视图与控制器. 1 视图 在MVC中,视图用来定义和渲染UI.在UI5中,视图的类型是可以自定义的,除了以下预定义的四种视图类型之外,你也可以定制自己的视图类型. 预定义的四种视图类型如下: XML view JSON view JS view HTML view 如果你想定义自己的视图类型,可以通过扩展 sap.ui.core.mvc.View 这个基类来实现. 1.1 视图的加载 视图可以通过异步(async)或者同步(sync)的方式加载,默认

CodeIgniter视图 &amp; 模型 &amp; 控制器

-------------------------------------------------------------------------------------------------------- 载入视图 $this->load->view('home/name'); //可以用子文件夹存储视图,默认视图文件以'.php'结尾 载入多个视图 $data['title'] = 'chenwei'; //给视图添加动态数据 $data['message'] = 'Your messa

ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类.指定数据库连接字符串以及创建一个数据库.最后,我们还将添加视图和控制器来管理和显式产品和分类数据. 注意:如果你想按照本章的代码编写示例,你必须完成第一章或者直接从www.apress.com下载第一章的源代码. 2.1 添加模型类 Entity Framework的代码优先模式允许我们从模型类创

Salesforce视图与控制器之间的交互

刚接触Salesforce,过程的确是比较艰难了,中文资料几乎没有,看英文资料学的效率却不高,不过看了一段时间的英文资料发现自己英语水平挺高不少啊,现在看都不用工具翻译,早知道就再次尝试报个6级,看下能过不,嘻嘻....Salesforce的开发也是MVC模式,asp.net的MVC就玩的比较多了,换个平台一下子没适应过来,不过原理都一样,接下来就介绍一下最近的学习成果吧,来看一下SF中MVC模式下视图与控制器之间的交互,先贴控制器和视图的代码,下面有详细讲解. apex视图代码如下: <ape

MVC学习系列9--从视图向控制器传递数据

前面学习了,从控制器向视图传递数据,现在学习怎么从视图向控制器传递数据. 通常,我们有两种方式,来处理浏览器的请求,一个是GET方式,一个是POST方式.一般来说,直接通过在浏览器中输入URL话,请求的方式是GET,那么GET方式的Action方法将会被调用,另一方面,如果是点击一个Button提交一个表单的话,这个时候POST方式的Action就会被调用. 这里我们说的是POST方式,怎么从视图向控制器传递数据,即把用户输入的表单信息的数据,传递到控制器对应的Action方法中. 这里先列举一

简单讲解MVC(视图/模型/控制器)

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. 视图 视图是用户看到并与之交互的界面.对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的W

MVC 模型、视图、控制器

所谓模型,就是在MVC设计模式中需要被显示的数据.在通常情况下,该模型需要从数据库中读取数据.保存模型的状态等,提供数据的访问方法及数据维护. 例如,对于SQL Server中数据库NorthWind的表Products来说,一个Product对象就是一个模型,该对象需要读取数据库中的信息,并对该数据表进行查询.添加.修改等操作.对于一个比较小型的应用程序而言,模型也许只是概念上的,假如一个应用程序需要读取数据,然后显示在用户界面上,而在该应用程序中并不存在一个物理上的数据模型或者相关的类,那么

[.net 面向对象程序设计深入](6).NET MVC 6 —— 模型、视图、控制器、路由等的基本操作

[.net 面向对象程序设计深入](6).NET MVC 6 —— 模型.视图.控制器.路由等的基本操作 1. 使用Visual Studio 2015创建Web App (1)文件>新建>项目,选择Web>ASP.NET Web 应用程序 (2)在新项目MyFirstWebApp对话框中,选择ASP.NET 5模板>Web Application 由于是RC版,这里的”添加单元测试“暂时不能选,上面的WebForms MVC WebAPI将合并,前面一节介绍过了,因此也不需要再选

SSAS:定义数据源视图

创建项目 项目目录 Data Sources:用于存放数据源 Data Sources Views:用于存放数据源视图 Cubes Dimensions Mining Structures Roles Assemblies Miscellaneous 定义数据源 定义数据源视图 窗体说明 1. Diagram:呈现数据表及相互之间的关系2. Diagram Organizer:可以创建子视图3. Tables:引入的数据表 修改默认表名