UITextField筆記

我們有時需要定制化UITextField對象的風格,可以添加許多不同的重寫方法,來改變文本字段的顯示行為。這些方法都會返回一個CGRect結構,制定了文本字段每個部件的邊界范圍,甚至修改placeHolder顏色,字體。

– textRectForBounds:????//重寫來重置文字區域

– drawTextInRect://改變繪文字屬性.重寫時調用super可以按默認圖形屬性繪制,若自己完全重寫繪制函數,就不用調用super了.

– placeholderRectForBounds://重寫來重置占位符區域

– drawPlaceholderInRect://重寫改變繪制占位符屬性.重寫時調用super可以按默認圖形屬性繪制,若自己完全重寫繪制函數,就不用調用super了

– borderRectForBounds://重寫來重置邊緣區域

– editingRectForBounds://重寫來重置編輯區域

– clearButtonRectForBounds://重寫來重置clearButton位置,改變size可能導致button的圖片失真

– leftViewRectForBounds:

– rightViewRectForBounds:

通過– drawPlaceholderInRect:方法可改變placeHolder顏色、字體,請看代碼:

首先定義一個類CustomTextField讓它繼承UITextField實現以下方法即可:

//控制清除按鈕的位置

-(CGRect)clearButtonRectForBounds:(CGRect)bounds

{

returnCGRectMake(bounds.origin.x+ bounds.size.width-50, bounds.origin.y+ bounds.size.height-20,16,16);

}

//控制placeHolder的位置,左右縮20

-(CGRect)placeholderRectForBounds:(CGRect)bounds

{

//return CGRectInset(bounds, 20, 0);

CGRectinset =CGRectMake(bounds.origin.x+100, bounds.origin.y, bounds.size.width-10, bounds.size.height);//更好理解些

returninset;

}

//控制顯示文本的位置

-(CGRect)textRectForBounds:(CGRect)bounds

{

//return CGRectInset(bounds, 50, 0);

CGRectinset =CGRectMake(bounds.origin.x+190, bounds.origin.y, bounds.size.width-10, bounds.size.height);//更好理解些

returninset;

}

//控制編輯文本的位置

-(CGRect)editingRectForBounds:(CGRect)bounds

{

//return CGRectInset( bounds, 10 , 0 );

CGRectinset =CGRectMake(bounds.origin.x+10, bounds.origin.y, bounds.size.width-10, bounds.size.height);

returninset;

}

//控制左視圖位置

- (CGRect)leftViewRectForBounds:(CGRect)bounds

{

CGRectinset =CGRectMake(bounds.origin.x+10, bounds.origin.y, bounds.size.width-250, bounds.size.height);

returninset;

//return CGRectInset(bounds,50,0);

}

//控制placeHolder的顏色、字體

- (void)drawPlaceholderInRect:(CGRect)rect

{

//CGContextRef context = UIGraphicsGetCurrentContext();

//CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor);

[[UIColororangeColor]setFill];

[[selfplaceholder]drawInRect:rectwithFont:[UIFontsystemFontOfSize:20]];

}

//下面是使用CustomTextField的代碼,可放在viewDidLoad等方法中

_textField= [[CustomTextFieldalloc]initWithFrame:CGRectMake(20,150,280,30)];

_textField.placeholder=@"請輸入帳號信息";

_textField.borderStyle=UITextBorderStyleRoundedRect;

_textField.textAlignment=UITextAlignmentLeft;

_textField.delegate=self;

_textField.clearButtonMode=UITextFieldViewModeWhileEditing;

_textField.text=@"aa";

UIImageView*imgv = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"icon-iwant-2.png"]];

_textField.leftView= imgv;

_textField.leftViewMode=UITextFieldViewModeAlways;

[self.viewaddSubview:_textField];

1)可以根據需要設置文本框的樣式(包括形狀、邊框顏色、背景等)。

(2)可以根據需要設置文字顯示樣式(包括輸入密碼時的密文顯示、文字橫向居中、縱向居中上下、輸入的文字是否首席木大寫、文字超過后是否縮小還是向右滾動等)。

(3)可以根據需要設置各種不同的鍵盤樣式(只有數字、只有字母等等)。

(4)還有inputView可以彈出一個視圖,用于取代彈出鍵盤,暫時不知道什么用處,但貌似可以用得地方很多啊。

(5)還有return的樣式設置,可以設置為Google也可以設置為Go和Search等更形象的按鈕。

(6)還有一個clearsOnBeginEditing是否設置清除按鈕也很常用。

(7)還有用得比較多得估計是左右視圖,也就是我們常見的用戶名和密碼的前面還有一個小icon圖片表示用戶的“小人”和表示密碼的“鎖”的圖片,用左右視圖可以加載進來,當然最后要記得設置左右視圖模式為Always,不然默認是Never不顯示的。

- (void)viewDidLoad {

//textfiled1本想是textField1的,但不影響

UITextField *textFiled1=[[UITextField alloc]init];

//此時textField1已存在,但因為是透明背景,所以看不見,但是點擊那塊地方會發現光標閃爍可寫

//為了證明是透明背景而不是白色背景,我們可以設置self.view背景為紅色,看看textField1是白色還是透明色

//? ? self.view.backgroundColor=[UIColor redColor];

textFiled1.frame=CGRectMake(10, 30, 300, 30);

//設置邊框樣式

//UITextBorderStyleRoundedRect-圓角矩形,背景是白色,不再是透明的

//UITextBorderStyleLine-矩形,黑色邊框,透明背景

//UITextBorderStyleBezel-和上面類似,但是是灰色的邊框,背景透明

textFiled1.borderStyle=UITextBorderStyleRoundedRect;

//設置背景顏色,會覆蓋上面圓角矩形默認的白色背景

textFiled1.backgroundColor=[UIColor purpleColor];

//設置提示(默認)文字

textFiled1.placeholder=@"請輸入您的密碼";

//設置密文輸入,就是和輸入密碼時類似的顯示為小圓點

textFiled1.secureTextEntry=YES;

//設置鍵盤樣式,比如銀行取款密碼只需要數字,有的輸入郵箱需要@等等

//UIKeyboardTypeAlphabet和UIKeyboardTypeDefault類似,就是我們平時看到那樣,都是字母,然后有個按鍵可以切換符號

//UIKeyboardTypeASCIICapable好像和上面差不多

//UIKeyboardTypeDecimalPad,UIKeyboardTypeNumberPad都是數字,但前者多了一個“小數點”按鍵

//UIKeyboardTypeEmailAddress-除了字母還有小數點和@出現

//UIKeyboardTypeNamePhonePad-貌似正常

//UIKeyboardTypePhonePad-電話鍵盤,不僅有數字還有*和#的那種

//UIKeyboardTypeNumbersAndPunctuation-只有數字和標點符號

//UIKeyboardTypeTwitter-除了字母還有@和#,這是微博的符號

//UIKeyboardTypeURL-除字母,還有.com按鈕,方便輸入

//UIKeyboardTypeWebSearch-主要區別在于return鍵變成了GO鍵

//注意:如果是最xcode6下的模擬器的話,默認是不調出軟鍵盤的,按CMD+K可以調出,或者在菜單Hardware里地Keyboard里設置

textFiled1.keyboardType=UIKeyboardTypeWebSearch;

//設置鍵盤外觀

//UIKeyboardAppearanceDark和UIKeyboardAppearanceAlert都是把鍵盤背景變成半透明灰色區別不明顯

//UIKeyboardAppearanceLight貌似和UIKeyboardAppearanceDefault一樣,沒啥區別

textFiled1.keyboardAppearance=UIKeyboardAppearanceAlert;

//設置彈出視圖,inputView即彈出的不是鍵盤而是這個視圖

//設置的frame時,只有高度有用,其他x和y和寬都是無效的,寬是默認的整個鍵盤寬度

UIImageView *imgView1=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"logo-60@3x.png"]];

imgView1.frame=CGRectMake(60, 60, 300, 300);

textFiled1.inputView=imgView1;

//設置左視圖,就是用戶名和密碼,有時候放個圖片的位置

UIView *view1=[[UIView alloc]init];

//x和y無效,x都是0,而y是根據高度來自動調整的。即高度如果超過textField則默認是textField高,如小于textField高度,則上下居中顯示。唯一有效的就是寬度

view1.frame=CGRectMake(10, 500, 50, 10);

view1.backgroundColor=[UIColor orangeColor];

textFiled1.leftView=view1;

//最重要的時:默認它是不顯示的即UITextFieldViewModeNever,我們可以設置永遠顯示UITextFieldViewModeAlways

//UITextFieldViewModeUnlessEditing-一開始就有,點擊框,呃,貌似還有

//UITextFieldViewModeWhileEditing-一開始沒有,點擊框就出現

textFiled1.leftViewMode=UITextFieldViewModeAlways;

//同樣,我們可以設置右視圖,當然也可以加載和圖片進來

UIImageView *imgView2=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"logo-60@3x.png"]];

imgView2.frame=CGRectMake(10, 500, 50, 10);

textFiled1.rightView=imgView2;

textFiled1.rightViewMode=UITextFieldViewModeAlways;

//設置清除按鈕,就是那個叉叉X,一點擊整個輸入框的文字全部刪除重新輸入的那個X(我們先注釋掉不讓右視圖顯示,來查看效果)

//其實我們在寫clearButtonMode是它又提示說這是一個UITextFieldViewMode類型,所以也是和上面一樣

textFiled1.clearButtonMode=UITextFieldViewModeWhileEditing;

//再次編輯時是否清空內容,這個除特定場景外很少用,會讓用戶抓狂的

//當然為了模擬再次編輯,我們需要鼠標點到其他地方然后再點回來,所以再創建一個textField

textFiled1.clearsOnBeginEditing=NO;

//這個clearsOnInsertion貌似點擊回去再次編輯時不清楚,但是只要一輸入內容就會清除之前的

textFiled1.clearsOnInsertion=YES;

UITextField *textField2=[[UITextField alloc]init];

textField2.frame=CGRectMake(10, 80, 300, 100);

textField2.borderStyle=UITextBorderStyleRoundedRect;

[self.view addSubview:textField2];

//我們用上面創建的textField2來做如下

//縱向對齊方式,默認是居中

//UIControlContentVerticalAlignmentCenter居中,所以Top、Bottom就是居上居下。Fill貌似和Top差不多

textField2.contentVerticalAlignment=UIControlContentVerticalAlignmentFill;

//當然還有橫向對齊

//也有左中右和Fill四種,但是貌似沒看到什么效果,可能對文字無效,因為有專門的針對文字的設置

textField2.contentHorizontalAlignment=UIControlContentHorizontalAlignmentRight;

//設置文字對齊方式

//同樣我們輸入textAlignment時有提示是NSTextAlignment類型,有好幾種,不細講

textField2.textAlignment=NSTextAlignmentCenter;

//設置調整文字大小以適配寬度(即輸入不下時縮小文字,實在縮小不了了,就向后滾動),默認是向右滾動的

textField2.adjustsFontSizeToFitWidth=YES;

//設置最小字號,和上面有關,即小于這個字號的時候,我就不縮小了,直接向右滾動

textField2.minimumFontSize=2;

//設置字母大小樣式,輸入autocapitalizationType時有提示是UITextAutocapitalizationType類型

//UITextAutocapitalizationTypeAllCharacters-所有字母大寫(用鍵盤輸入的話發現失效,需要用軟鍵盤輸入才有效,以下同理)

//UITextAutocapitalizationTypeWords-單詞首字母大寫

//UITextAutocapitalizationTypeSentences-句首字母大寫

textField2.autocapitalizationType=UITextAutocapitalizationTypeSentences;

//設置return樣式,有Done/Go/Next/Join/Google/Search/Yahoo/EmergencyCall/Send等,除了默認外,其他的按鈕都是藍顏色背景

textField2.returnKeyType=UIReturnKeyEmergencyCall;

[self.view addSubview:textFiled1];

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容