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 : NSString、NSMutableString
一.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聲明。
在用代理調用代理方法時,須要判斷代理是否實現了協議方法。