天天看點

iOS-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 : NSString、NSMutableSt

#pragma mark 當一個對象從xib檔案中建立完畢的時候調用一次
- (void)awakeFromNib {}      

轉載于:https://www.cnblogs.com/DarbyCJ/p/3658770.html

繼續閱讀