UITextField

一、UITextField

1.常见属性

@property(nonatomic,retain) UIView *leftView; // 设置文本框左边显示什么控件,可以让文本框的内容往右边挪动

@property(nonatomic)        UITextFieldViewMode leftViewMode; // 设置左边控件的显示模式

/*

 UITextFieldViewMode的取值

 UITextFieldViewModeNever, 永远不显示

 UITextFieldViewModeWhileEditing, 当文本框正在编辑的时候显示

 UITextFieldViewModeUnlessEditing, 文本框没有编辑的时候显示

 UITextFieldViewModeAlways 永远显示

 */

// 当文本框发生了一些事情,会通知他的代理

@property(nonatomic,assign) id<UITextFieldDelegate> delegate;

 

2.代理方法UITextFieldDelegate协议中声明的方法

// 当文本框的return key按钮被点击的时候调用(右下角的按钮被点击)

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

 

二、用宏定义自动生成代码

1.比如定义下面的宏

#define kTest(name) \

+ (id)name##WithDict:(NSDictionary *)dict \

{ \

    return [[self alloc] initWithDict:dict]; \

}

 

那么kTest(person)就相当于生成下面的代码

+ (id)personWithDict:(NSDictionary *)dict

{

    return [[self alloc] initWithDict:dict];

}

 

2.知识点

1> 如果要分离相连的标识符,使用连接符##

2> \ 代表后面一行的代码也是属于宏的

3> 不要在最后一行增加 \

 

三、代理设计模式

1.使用场合:

1> A对象发生了一些事情,想告诉B对象,就让B对象成为A对象的代理

2> B对象想监听A对象发生的一些事情,就让B对象成为A对象的代理

 

2.步骤

1> 定义一份代理协议(比如QQGroupHeaderDelegate)(等着代理对象去实现)

* 协议名都以控件的类名开头,比如QQGroupHeader的代理协议叫做QQGroupHeaderDelegate

* 协议里面的方法一般都不强制代理去实现,所以方法前面加上@optional

* 协议里面的方法名都以类名开头(但是不加前缀,比如QQGroupHeader的代理方法都是以groupHeader开头)

* 协议里面的方法必须能传入控件本身这个参数

 

2> 定义一个代理属性

@property (nonatomic, weak) id<QQGroupHeaderDelegate> delegate;

 

3> 设置代理属性(代理用weak

header.delegate = controller;

 

4> 通知代理

* 先检测代理有没有实现对应的代理方法

if ([_delegate respondsToSelector:@selector(groupHeaderClick:)]) {

    [_delegate groupHeaderClick:self];

}

 

四、@property的内存管理策略

weak : UI控件、代理

strong : weak外的所有OC对象

assign : 基本数据类型

copy : NSStringNSMutableString

posted @ 2014-04-17 14:45  TianXiang.Liu  阅读(123)  评论(0编辑  收藏  举报