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聲明。

在用代理調用代理方法時,須要判斷代理是否實現了協議方法。

相關文章
相關標籤/搜索