一、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 : NSString、NSMutableSt #pragma mark 当一个对象从xib文件中创建完毕的时候调用一次 - (void)awakeFromNib {}