iOS基础 - UITextField

1、UITextField面试

1.常见属性设计模式

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

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

/*atom

 UITextFieldViewMode的取值spa

 UITextFieldViewModeNever, 永远不显示设计

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

 UITextFieldViewModeUnlessEditing, 文本框没有编辑的时候显示代码规范

 UITextFieldViewModeAlways 永远显示对象

 */

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

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

 

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

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

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

 

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

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> 不要在最后一行增长 \

 

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];

}

 

4、@property的内存管理策略

weak : UI控件、代理

strong : weak外的全部OC对象

assign : 基本数据类型

copy : NSStringNSMutableString

 

 

 

 

.QQ聊天布局

 

1.更改UITextField的发送按钮

2.设置UITextField的代理

3.实现UITextField的代理方法

4.建立一条消息

5.细节处理

5.1 修改文本框占位符

5.2 让文本输入框文字靠右

5.3 监听Voice按钮

.设计代理方法的时候,尽可能传一些有用的参数。必须传遵照了谁的协议,这是规范。

.面试解答:为何要监听UITextField,由于当在UITextField输入文字的时候,系统会自动给UITextField发送代理方法。

四.QQ好友列表思路

1.先解析plist文件

2.建立一个QQGroup模型.

3.建立一个QQFriend模型.

注意:写代码规范,新建立的类都要以项目名字为前缀,方法名不要加前缀。

4.简化操做

5.plist文件转换成模型。

6.实现数据源方法

7.用一个xib文件描述头部视图

8.自定义头部视图类,内部提供一个设置QQGroup的接口。

9.为了实现展开功能,还须要设置一个判断是否展开的属性。

10.监听头部视图按钮的点击。

1.状态取反

2.通知代理

3.旋转图片

11.给头部视图定义一个协议,并添加一个代理属性。

12.控制器做为头部视图的代理

13.用一个字典保存全部的头部视图,循环利用。

五.为何要定义协议

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

一个对象发生某些事情,经过代理告诉其余对象。任何对象都能做为代理,可是必须遵照协议。

代理的缺点是:一对一,只能设置一个代理。

代理的规范:代理协议必须以类名开头,而且要传入一个参数出去,用来告诉代理遵照了谁的协议。

协议方法不用以类名开头。

协议方法中若是一些方法,不必定要实现,须要用@optional声明。

在用代理调用代理方法时,须要判断代理是否实现了协议方法。

相关文章
相关标签/搜索