UITextField筆記

我們有時(shí)需要定制化UITextField對(duì)象的風(fēng)格,可以添加許多不同的重寫(xiě)方法疲扎,來(lái)改變文本字段的顯示行為纪隙。這些方法都會(huì)返回一個(gè)CGRect結(jié)構(gòu),制定了文本字段每個(gè)部件的邊界范圍等恐,甚至修改placeHolder顏色,字體备蚓。

– textRectForBounds:????//重寫(xiě)來(lái)重置文字區(qū)域

– drawTextInRect://改變繪文字屬性.重寫(xiě)時(shí)調(diào)用super可以按默認(rèn)圖形屬性繪制,若自己完全重寫(xiě)繪制函數(shù)课蔬,就不用調(diào)用super了.

– placeholderRectForBounds://重寫(xiě)來(lái)重置占位符區(qū)域

– drawPlaceholderInRect://重寫(xiě)改變繪制占位符屬性.重寫(xiě)時(shí)調(diào)用super可以按默認(rèn)圖形屬性繪制,若自己完全重寫(xiě)繪制函數(shù),就不用調(diào)用super了

– borderRectForBounds://重寫(xiě)來(lái)重置邊緣區(qū)域

– editingRectForBounds://重寫(xiě)來(lái)重置編輯區(qū)域

– clearButtonRectForBounds://重寫(xiě)來(lái)重置clearButton位置,改變size可能導(dǎo)致button的圖片失真

– leftViewRectForBounds:

– rightViewRectForBounds:

通過(guò)– drawPlaceholderInRect:方法可改變placeHolder顏色郊尝、字體二跋,請(qǐng)看代碼:

首先定義一個(gè)類(lèi)CustomTextField讓它繼承UITextField實(shí)現(xiàn)以下方法即可:

//控制清除按鈕的位置

-(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=@"請(qǐng)輸入帳號(hào)信息";

_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)可以根據(jù)需要設(shè)置文本框的樣式(包括形狀、邊框顏色况凉、背景等)谚鄙。

(2)可以根據(jù)需要設(shè)置文字顯示樣式(包括輸入密碼時(shí)的密文顯示、文字橫向居中刁绒、縱向居中上下闷营、輸入的文字是否首席木大寫(xiě)、文字超過(guò)后是否縮小還是向右滾動(dòng)等)知市。

(3)可以根據(jù)需要設(shè)置各種不同的鍵盤(pán)樣式(只有數(shù)字傻盟、只有字母等等)。

(4)還有inputView可以彈出一個(gè)視圖嫂丙,用于取代彈出鍵盤(pán)娘赴,暫時(shí)不知道什么用處,但貌似可以用得地方很多啊奢入。

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

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

(7)還有用得比較多得估計(jì)是左右視圖关顷,也就是我們常見(jiàn)的用戶名和密碼的前面還有一個(gè)小icon圖片表示用戶的“小人”和表示密碼的“鎖”的圖片,用左右視圖可以加載進(jìn)來(lái)武福,當(dāng)然最后要記得設(shè)置左右視圖模式為Always议双,不然默認(rèn)是Never不顯示的。

- (void)viewDidLoad {

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

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

//此時(shí)textField1已存在平痰,但因?yàn)槭峭该鞅尘肮眨钥床灰?jiàn),但是點(diǎn)擊那塊地方會(huì)發(fā)現(xiàn)光標(biāo)閃爍可寫(xiě)

//為了證明是透明背景而不是白色背景宗雇,我們可以設(shè)置self.view背景為紅色昂芜,看看textField1是白色還是透明色

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

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

//設(shè)置邊框樣式

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

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

//UITextBorderStyleBezel-和上面類(lèi)似舞虱,但是是灰色的邊框欢际,背景透明

textFiled1.borderStyle=UITextBorderStyleRoundedRect;

//設(shè)置背景顏色,會(huì)覆蓋上面圓角矩形默認(rèn)的白色背景

textFiled1.backgroundColor=[UIColor purpleColor];

//設(shè)置提示(默認(rèn))文字

textFiled1.placeholder=@"請(qǐng)輸入您的密碼";

//設(shè)置密文輸入矾兜,就是和輸入密碼時(shí)類(lèi)似的顯示為小圓點(diǎn)

textFiled1.secureTextEntry=YES;

//設(shè)置鍵盤(pán)樣式损趋,比如銀行取款密碼只需要數(shù)字,有的輸入郵箱需要@等等

//UIKeyboardTypeAlphabet和UIKeyboardTypeDefault類(lèi)似椅寺,就是我們平時(shí)看到那樣浑槽,都是字母,然后有個(gè)按鍵可以切換符號(hào)

//UIKeyboardTypeASCIICapable好像和上面差不多

//UIKeyboardTypeDecimalPad,UIKeyboardTypeNumberPad都是數(shù)字配并,但前者多了一個(gè)“小數(shù)點(diǎn)”按鍵

//UIKeyboardTypeEmailAddress-除了字母還有小數(shù)點(diǎn)和@出現(xiàn)

//UIKeyboardTypeNamePhonePad-貌似正常

//UIKeyboardTypePhonePad-電話鍵盤(pán)括荡,不僅有數(shù)字還有*和#的那種

//UIKeyboardTypeNumbersAndPunctuation-只有數(shù)字和標(biāo)點(diǎn)符號(hào)

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

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

//UIKeyboardTypeWebSearch-主要區(qū)別在于return鍵變成了GO鍵

//注意:如果是最xcode6下的模擬器的話嫉髓,默認(rèn)是不調(diào)出軟鍵盤(pán)的观腊,按CMD+K可以調(diào)出,或者在菜單Hardware里地Keyboard里設(shè)置

textFiled1.keyboardType=UIKeyboardTypeWebSearch;

//設(shè)置鍵盤(pán)外觀

//UIKeyboardAppearanceDark和UIKeyboardAppearanceAlert都是把鍵盤(pán)背景變成半透明灰色區(qū)別不明顯

//UIKeyboardAppearanceLight貌似和UIKeyboardAppearanceDefault一樣算行,沒(méi)啥區(qū)別

textFiled1.keyboardAppearance=UIKeyboardAppearanceAlert;

//設(shè)置彈出視圖梧油,inputView即彈出的不是鍵盤(pán)而是這個(gè)視圖

//設(shè)置的frame時(shí),只有高度有用州邢,其他x和y和寬都是無(wú)效的儡陨,寬是默認(rèn)的整個(gè)鍵盤(pán)寬度

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

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

textFiled1.inputView=imgView1;

//設(shè)置左視圖,就是用戶名和密碼量淌,有時(shí)候放個(gè)圖片的位置

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

//x和y無(wú)效骗村,x都是0,而y是根據(jù)高度來(lái)自動(dòng)調(diào)整的呀枢。即高度如果超過(guò)textField則默認(rèn)是textField高胚股,如小于textField高度,則上下居中顯示裙秋。唯一有效的就是寬度

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

view1.backgroundColor=[UIColor orangeColor];

textFiled1.leftView=view1;

//最重要的時(shí):默認(rèn)它是不顯示的即UITextFieldViewModeNever琅拌,我們可以設(shè)置永遠(yuǎn)顯示UITextFieldViewModeAlways

//UITextFieldViewModeUnlessEditing-一開(kāi)始就有缨伊,點(diǎn)擊框,呃进宝,貌似還有

//UITextFieldViewModeWhileEditing-一開(kāi)始沒(méi)有刻坊,點(diǎn)擊框就出現(xiàn)

textFiled1.leftViewMode=UITextFieldViewModeAlways;

//同樣,我們可以設(shè)置右視圖党晋,當(dāng)然也可以加載和圖片進(jìn)來(lái)

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

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

textFiled1.rightView=imgView2;

textFiled1.rightViewMode=UITextFieldViewModeAlways;

//設(shè)置清除按鈕谭胚,就是那個(gè)叉叉X,一點(diǎn)擊整個(gè)輸入框的文字全部刪除重新輸入的那個(gè)X(我們先注釋掉不讓右視圖顯示隶校,來(lái)查看效果)

//其實(shí)我們?cè)趯?xiě)clearButtonMode是它又提示說(shuō)這是一個(gè)UITextFieldViewMode類(lèi)型漏益,所以也是和上面一樣

textFiled1.clearButtonMode=UITextFieldViewModeWhileEditing;

//再次編輯時(shí)是否清空內(nèi)容,這個(gè)除特定場(chǎng)景外很少用深胳,會(huì)讓用戶抓狂的

//當(dāng)然為了模擬再次編輯绰疤,我們需要鼠標(biāo)點(diǎn)到其他地方然后再點(diǎn)回來(lái),所以再創(chuàng)建一個(gè)textField

textFiled1.clearsOnBeginEditing=NO;

//這個(gè)clearsOnInsertion貌似點(diǎn)擊回去再次編輯時(shí)不清楚舞终,但是只要一輸入內(nèi)容就會(huì)清除之前的

textFiled1.clearsOnInsertion=YES;

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

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

textField2.borderStyle=UITextBorderStyleRoundedRect;

[self.view addSubview:textField2];

//我們用上面創(chuàng)建的textField2來(lái)做如下

//縱向?qū)R方式轻庆,默認(rèn)是居中

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

textField2.contentVerticalAlignment=UIControlContentVerticalAlignmentFill;

//當(dāng)然還有橫向?qū)R

//也有左中右和Fill四種,但是貌似沒(méi)看到什么效果夸盟,可能對(duì)文字無(wú)效蛾方,因?yàn)橛袑iT(mén)的針對(duì)文字的設(shè)置

textField2.contentHorizontalAlignment=UIControlContentHorizontalAlignmentRight;

//設(shè)置文字對(duì)齊方式

//同樣我們輸入textAlignment時(shí)有提示是NSTextAlignment類(lèi)型,有好幾種上陕,不細(xì)講

textField2.textAlignment=NSTextAlignmentCenter;

//設(shè)置調(diào)整文字大小以適配寬度(即輸入不下時(shí)縮小文字桩砰,實(shí)在縮小不了了,就向后滾動(dòng))释簿,默認(rèn)是向右滾動(dòng)的

textField2.adjustsFontSizeToFitWidth=YES;

//設(shè)置最小字號(hào)亚隅,和上面有關(guān),即小于這個(gè)字號(hào)的時(shí)候庶溶,我就不縮小了煮纵,直接向右滾動(dòng)

textField2.minimumFontSize=2;

//設(shè)置字母大小樣式,輸入autocapitalizationType時(shí)有提示是UITextAutocapitalizationType類(lèi)型

//UITextAutocapitalizationTypeAllCharacters-所有字母大寫(xiě)(用鍵盤(pán)輸入的話發(fā)現(xiàn)失效偏螺,需要用軟鍵盤(pán)輸入才有效行疏,以下同理)

//UITextAutocapitalizationTypeWords-單詞首字母大寫(xiě)

//UITextAutocapitalizationTypeSentences-句首字母大寫(xiě)

textField2.autocapitalizationType=UITextAutocapitalizationTypeSentences;

//設(shè)置return樣式,有Done/Go/Next/Join/Google/Search/Yahoo/EmergencyCall/Send等砖茸,除了默認(rèn)外隘擎,其他的按鈕都是藍(lán)顏色背景

textField2.returnKeyType=UIReturnKeyEmergencyCall;

[self.view addSubview:textFiled1];

[super viewDidLoad];

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

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市凉夯,隨后出現(xiàn)的幾起案子货葬,更是在濱河造成了極大的恐慌采幌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件震桶,死亡現(xiàn)場(chǎng)離奇詭異休傍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蹲姐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)磨取,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人柴墩,你說(shuō)我怎么就攤上這事忙厌。” “怎么了江咳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵逢净,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我歼指,道長(zhǎng)爹土,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任踩身,我火速辦了婚禮胀茵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挟阻。我一直安慰自己琼娘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布附鸽。 她就那樣靜靜地躺著轨奄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拒炎。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,021評(píng)論 1 291
  • 那天挨务,我揣著相機(jī)與錄音击你,去河邊找鬼。 笑死谎柄,一個(gè)胖子當(dāng)著我的面吹牛丁侄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播朝巫,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鸿摇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了劈猿?” 一聲冷哼從身側(cè)響起拙吉,我...
    開(kāi)封第一講書(shū)人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤潮孽,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后筷黔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體往史,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年佛舱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了椎例。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡请祖,死狀恐怖订歪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肆捕,我是刑警寧澤刷晋,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站福压,受9級(jí)特大地震影響掏秩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荆姆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一蒙幻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胆筒,春花似錦邮破、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至彤蔽,卻和暖如春摧莽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背顿痪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工镊辕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚁袭。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓征懈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親揩悄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卖哎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容