在iOS中UITextField這個(gè)控件作為文本輸入控件一定是使用率最高的幾個(gè)控件之一,而iOS提供的默認(rèn)的原始TextField的造型肯定在開發(fā)時(shí)很難滿足我們的要求,原因很簡單,不夠美觀,實(shí)在太單調(diào)。所以今天我們從一些簡單的復(fù)寫UITextField方法開始,來講一講如何定制一個(gè)屬于自己的UITextField。
之前的文章我們講過UITextField中,如何設(shè)置leftView,圓角以及控制文字輸入時(shí)的距離。今天我們主要從UITextField的鍵盤收起、placeholder的設(shè)置以及自定義距離、字體,以及控制輸入文本時(shí),距離UITextField邊框的距離和UITextField中一些常用的方法和枚舉變量等方面來闡述如何定制自己的UITextField。
鍵盤的收起
首先我們先來看UITextField的鍵盤彈出和回收,UITextField在默認(rèn)的情況下,鍵盤在輸入完成后是不會自動回收的,這里我們講解如何在按下Return鍵時(shí),鍵盤自動回收。首先我們要遵循<UITextFieldDelegate>協(xié)議,之后在后面寫入
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
通過寫入這個(gè)方法,來實(shí)現(xiàn)按下Return按鈕回收鍵盤。
placeholder的設(shè)置
在一些特定功能的文本輸入框,我們常常要設(shè)置placeholder屬性來指明當(dāng)期UITextField的功能,例如:請?jiān)诖颂庉斎朊艽a。可是placeholde的默認(rèn)屬性是緊貼文本輸入框的,而且字體以及字體大小也不美觀,于是我們可以這么來設(shè)置placeholder
//控制placeHolder的位置,左右縮20
-(CGRect)placeholderRectForBounds:(CGRect)bounds
{
return CGRectInset(bounds, 20, 4);
}
//控制左視圖位置
- (CGRect)leftViewRectForBounds:(CGRect)bounds
{
return CGRectInset(bounds,0,0);
}
//控制編輯文本的位置
-(CGRect)editingRectForBounds:(CGRect)bounds
{
return CGRectInset( bounds, 20, 0);
}
//控制顯示文本的位置
-(CGRect)textRectForBounds:(CGRect)bounds
{
return CGRectInset(bounds, 20, 0);
}
我們可以先如上面的代碼一樣,設(shè)置placeholder的位置,同時(shí)要注意的一點(diǎn)是,在設(shè)置了placeholder的位置之后,我們也要相應(yīng)的調(diào)整文本顯示的位置,以及在編輯完成后,文本顯示在輸入框的位置。
至于placeholder的字體和字體大小設(shè)置 可以用如下方法設(shè)置,記住這個(gè)方法寫在子類化的UITextField中是沒有效果的,一定要寫在創(chuàng)建UITextField的過程中。
[TextField setValue:[UIFont fontWithName:@"Arial" size:12] forKeyPath:@"_placeholderLabel.font"];
UITextField中一些常用的屬性以及枚舉變量
UITextFieldBorder 邊框設(shè)置
設(shè)置TextField的邊框效果,一定要設(shè)置了才有效果,類型如下
typedef NS_ENUM(NSInteger, UITextBorderStyle) {
UITextBorderStyleNone,
UITextBorderStyleLine,
UITextBorderStyleBezel,
UITextBorderStyleRoundedRect
};
UITextFieldViewMode
此屬性用來定義我們之前講的leftView和rightView的存在時(shí)機(jī)
typedef NS_ENUM(NSInteger, UITextFieldViewMode) {
UITextFieldViewModeNever,
UITextFieldViewModeWhileEditing,
UITextFieldViewModeUnlessEditing,
UITextFieldViewModeAlways
};
UIReturnKeyType返回按鈕類型
在鍵盤上的返回按鍵,系統(tǒng)也給我們提供了一些常用的類型
typedef NS_ENUM(NSInteger, UIReturnKeyType) {
UIReturnKeyDefault,
UIReturnKeyGo,
UIReturnKeyGoogle,
UIReturnKeyJoin,
UIReturnKeyNext,
UIReturnKeyRoute,
UIReturnKeySearch,
UIReturnKeySend,
UIReturnKeyYahoo,
UIReturnKeyDone,
UIReturnKeyEmergencyCall,
UIReturnKeyContinue NS_ENUM_AVAILABLE_IOS(9_0),
};
UIKeyboardType鍵盤類型
typedef NS_ENUM(NSInteger, UIKeyboardType) {
UIKeyboardTypeDefault,
UIKeyboardTypeASCIICapable,
UIKeyboardTypeNumbersAndPunctuation,
UIKeyboardTypeURL,
UIKeyboardTypeNumberPad,
UIKeyboardTypePhonePad,
UIKeyboardTypeNamePhonePad,
UIKeyboardTypeEmailAddress,
UIKeyboardTypeDecimalPad ,
UIKeyboardTypeWebSearch ,
UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable,
};
//輸入框中是否有個(gè)叉號,在什么時(shí)候顯示,用于一次性刪除輸入框中的內(nèi)容
text.clearButtonMode = UITextFieldViewModeAlways;
//每輸入一個(gè)字符就變成點(diǎn) 用語密碼輸入
text.secureTextEntry = YES;
//是否糾錯(cuò)
text.autocorrectionType = UITextAutocorrectionTypeNo;
typedef enum {
UITextAutocorrectionTypeDefault, 默認(rèn)
UITextAutocorrectionTypeNo, 不自動糾錯(cuò)
UITextAutocorrectionTypeYes, 自動糾錯(cuò)
} UITextAutocorrectionType;
//再次編輯就清空
text.clearsOnBeginEditing = YES;
//設(shè)置為YES時(shí)文本會自動縮小以適應(yīng)文本窗口大小.默認(rèn)是保持原來大小,而讓長文本滾動
textFied.adjustsFontSizeToFitWidth = YES;
//首字母是否大寫
text.autocapitalizationType = UITextAutocapitalizationTypeNone;
typedef enum {
UITextAutocapitalizationTypeNone, 不自動大寫
UITextAutocapitalizationTypeWords, 單詞首字母大寫
UITextAutocapitalizationTypeSentences, 句子的首字母大寫
UITextAutocapitalizationTypeAllCharacters, 所有字母都大寫
} UITextAutocapitalizationType;
//鍵盤外觀
textView.keyboardAppearance=UIKeyboardAppearanceDefault;
typedef enum {
UIKeyboardAppearanceDefault, 默認(rèn)外觀,淺灰色
UIKeyboardAppearanceAlert, 深灰 石墨色
} UIReturnKeyType;
大體屬性已經(jīng)羅列完畢,以后想到再來補(bǔ)充