UI 基础之-----delegate, 自定义视图

delegate


- (BOOL)textFieldShouldReturn:(UITextField*)textField{

    [ textField resignFirstResponder];

   returnYES;

}

程序的启动流程

1⃣  main 函数是程序入口

int main(int argc,char * argv[]){

@autoreleasepool{

 return UIApplicationMain(argc,argv,nil,NSStringFromClass([

  AppDelegate class]));

}

}

执行 UIApplicationMain函数时做了跳转,转到 AppDelete

 

2⃣  UIApplicationMain在程序入口函数 main 函数中调用,主要实现了3个功能:

①创建应用程序(UIApplication)实例

②创建应用程序代理实例,代理的主要作用是,监听应用程序是如何执行的.

③建立时间循环(runloop: 死循环,不断检测程序运行状态,是否被触摸,晃动等)不断的监听,直到程序退出为止.

 

3⃣  UIApplicationMain 剖析

 int UIApplicationMain(

int argc;

char *argv[];

NSString *principalClassName;

NSString *delegateClassName;

)

principalClassName:应用程序对象的类名(UIApplication 或其子类)

delegateClassName:应用程序 delegate 的类名.(任何接受了 UIApplicationDelegate 的类)

UIApplicationMain根据上述两个类名创建应用程序实例,应用程序代理实例,然后建立事件循环(runloop),检测程序的各种事件(程序开始启动,接收到触摸等等)

4⃣ 应用程序代理,主要检测应用程序的状态并做出相应的处理.

应用程序的状态有很多,比如:程序启动,进入活跃状态,进到后台,内存警告,收到远程消息

任何接受了 UIApplicationDelegate协议的对象都可以成为应用程序代理

一旦应用程序的某种状态触发,就会执行相应的代理方法.

5⃣ UIApplicationDelegate 是一个 OC 的协议.里面声明了一堆方法,这些方法都与应用程序运行状态有关,它们由应用程序代理实现. UIApplication 对象负责调用.

6⃣ UIApplicationDelegate 中的方法:

①- (BOOL)application: (UIApplication*)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions{}

告诉 delegate 程序启动即将完成,程序准备要运行.(delegate 实现这个方法时,要创建 window 对象,将程序内容通过 window 呈现给用户)

②- (void)applicationDidBecomeActive:(UIApplication *)application{}

告诉 delegate 应用程序已经进入活跃状态,(重新执行被暂停的任务)

③- (void)applicationWillResignAction:(UIApplication *)application{}

告诉代理程序即将进入非活跃状态,(暂停游戏,停止 timer 等)

④- (void)applicationDidEnterBackground:(UIApplication *)application{}

告诉 delegate 应用程序已经进入到了后台,(存储用户数据,释放一些共享资源,停止 timer 等)

⑤- (void)applicationWillEnterForeground:(UIApplication *)application{}

    告诉delegate 应用程序即将进入前台(取消所有进入后台时暂停的任务)

7⃣ 查看各个代理的执行顺序.

使用 NSLog(@”%@”,__FUNCTION__,__LINK__);

  自定义视图

就是将一些简单的控件进行组合,编写出符合自己需求的控件.

要做到(可复用,可移植,可精炼)

在自定义控件的时候,可以将控件封装到一个类中,进行调用显示.

下面的是一个 LTVIEW 类控件:

1⃣ 首先在. H 文件中需要定义两个实例变量

@proterty (retain,nonatomic)UILable *label;

@proterty (retain,nonatomic)UITextField *field;

2⃣ 在. M 文件中封装控件

-  (void)dealloc{

[_textField release];

[_lable release];

[super dealloc];

}

重写 UIView 的初始化方法

-  (id)initWithFrame:(CGRect)frame{

  self = [super initWithFrame:frame];

  if(self){

  [self p_setUp];

    }

return self;

}

创建方法

- (void)p_setUp{

 _label = [[UILabelalloc]initWithFrame:CGRectMake(0, 0, self.frame.size.width/3, self.frame.size.height)];

    _label.backgroundColor = [UIColoryellowColor];

    [selfaddSubview:_label];

    [_labelrelease];

   

    _textField = [[UITextFieldalloc]initWithFrame:CGRectMake(_label.frame.size.width, 0, self.frame.size.width*2/3, self.frame.size.height)];

    _textField.backgroundColor = [UIColorredColor];

    [selfaddSubview:_textField];

    [_textFieldrelease];

}
调用方法:首先引入头文件
// 使用自定义的视图类
    LTView *view = [[LTView alloc]initWithFrame:CGRectMake(10, 20, 300, 40)];
    view.backgroundColor = [UIColor whiteColor];
    [self.window addSubview:view];
    [view release];

四  视图控制器

1. 视图控制器的作用:

1⃣响应事件

2⃣分担 AppDelegate 的工作

3⃣实现模块独立,提高复用性

2.  创建 UIViewController 对象

UIViewController*control = [[UIViewController alloc]init];

UIViewController,自身带了一个UIView, 默认的大小和屏幕的大小一样

每个 window 都带有一个根视图,如果不给根视图,默认根视图就是它本身

设置 self.window 的跟视图控制器

self.window.rootViewController= control;

设置控制器的背景颜色

control.view.backgroundColor= [UIColor yellowColor];

设置按钮添加的时候;[control.view addSubview:button];

3.  使用自定义视图控制器进行操作

MyViewController*control = [[MyViewController alloc]init];

将根视图控制器设置为 control

self.window.rootViewController= control;

[controlrelease];

控制器内容如下图所示:

出事话方法和加载视图:

实现视图加载的方法:


内存处理的方法:

重写 didReceiveMemoryWarning方法:

-  (void)didReceiveMemoryWarning{

[superdidReceiveMemoryWarning];

//根视图已经加载过,根视图未显示

if([selfisViewLoaded] == YES && self.view.window == nil)

{

//将根视图销毁

self.view= nil;

}

}

4.  创建旋转视图控制器

RotationViewController*rotation = [[RotationViewController alloc]init];

将根视图设置为 rotation

self.window.rootViewController= rotation;

[rotationrelease];

控制器视图加载视图的实现:

屏幕旋转检测:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值