進入本文之前建議你認真讀一讀我的另一篇博文 : UIControl IOS控件編程 ?這樣會起到事半功倍效果 。
?
為什么要看另一篇關于UIControl的文章呢?因為UITextField繼承自UIControl類,很多UIControl的屬性、方法、通知等完全適用于UITextField,而那些屬于UIControl的東西我又不會在此贅述。(主要是減輕文章的長度,以最少的文字最通俗易懂講明白一個知識點是我追求的目標。)
?
創建
UITextField* myTextField = [[UITextField alloc]initWithFrame:CGRectMake(50, 100, 200, 50)];?
純代碼創建View請參看我的另一片博文: 有關View的幾個基礎知識點-IOS開發 (實例)
設置委托
myTextField.delegate = self;//委托類需要遵守UITextFieldDelegate協議?
設置屬性
UIControl屬性對UITextField完全可以用,下面的都是UITextFiels擴展的屬性:
myTextField.textAlignment = UITextAlignmentLeft;//默認就是左對齊,這個是UITextField擴展屬性 myTextField.borderStyle = UITextBorderStyleBezel;//默認是沒有邊框,如果使用了自定義的背景圖片邊框會被忽略掉 myTextField.placeholder = @"請在此輸入賬號";//為空白文本字段繪制一個灰色字符串作為占位符 myTextField.clearsOnBeginEditing = YES;//設置為YES當用點觸文本字段時,字段內容會被清除 myTextField.adjustsFontSizeToFitWidth = YES;//設置為YES時文本會自動縮小以適應文本窗口大小。默認是保持原來大小,而讓長文本滾動 //myTextField.background = [UIImage imageNamed:@"registBtn"];//可以接受UIImage對象,此項設置則邊框失效。 myTextField.clearButtonMode = UITextFieldViewModeUnlessEditing;//右邊顯示的'X'清楚按鈕 //myTextField.LeftView = //myTextField.leftViewMode = //myTextField.RightView = //myTextField.rightViewMode =?
這些屬性令你可以將 UIView 的派生類附著于為本字段的左方或右方。人們通常會將 UIButton 對象,比如放大鏡或者書簽按鈕附著與文本字段上。每個附著視圖都會有一個相應的模式,設置 clearButtonmode 屬性的那些值,同樣可以設置這個模式。
?
顯示
[self.view addSubview:myTextField];?
重寫繪制行為
除了UITextField對象的風格選項,你還可以定制化UITextField對象,為他添加許多不同的重寫方法,來改變文本字段的顯示行為。這些方法都會返回一個CGRect結構,制定了文本字段每個部件的邊界范圍。如果你創見了一個自定義的UITextField類,你可以重寫這些方法,這樣就可以改變一個或多個邊界。一定不要直接調用 fan廣發;它們都是被iPhone運行庫調用的回調函數下面舉個例子:
- (CGRect)clearButtonForBounds:(CGRect)bounds{ return CGRectMake(bounds.origin.x +bounds.size.width-50, bounds.origin.y+bounds.size.height-20, 16, 16); }?
下列方法在創建一個UITextField的子類時可以重寫:
borderRectForBounds
指定矩形邊界
textRectForBounds
? 指定顯示文本的邊界
placeholderRectForBounds
指定站位文本的邊界
editingRectForBounds
指定編輯中文本的邊界
clearButtonRectForBounds
指定顯示清除按鈕的邊界
leftViewRectForBounds
指定顯示左附著視圖的邊界
rightViewRectForBounds
指定顯示右附著視圖的邊界
?
委托方法
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ //返回一個BOOL值,指定是否循序文本字段開始編輯 return YES; }
- (void)textFieldDidBeginEditing:(UITextField *)textField{ //開始編輯時觸發,文本字段將成為first responder }
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{ //返回BOOL值,指定是否允許文本字段結束編輯,當編輯結束,文本字段會讓出first responder //要想在用戶結束編輯時阻止文本字段消失,可以返回NO //這對一些文本字段必須始終保持活躍狀態的程序很有用,比如即時消息 return NO; }
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ //當用戶使用自動更正功能,把輸入的文字修改為推薦的文字時,就會調用這個方法。 //這對于想要加入撤銷選項的應用程序特別有用 //可以跟蹤字段內所做的最后一次修改,也可以對所有編輯做日志記錄,用作審計用途。 //要防止文字被改變可以返回NO //這個方法的參數中有一個NSRange對象,指明了被改變文字的位置,建議修改的文本也在其中 return YES; }
- (BOOL)textFieldShouldClear:(UITextField *)textField{ //返回一個BOOL值指明是否允許根據用戶請求清除內容 //可以設置在特定條件下才允許清除內容 return YES; }
-(BOOL)textFieldShouldReturn:(UITextField *)textField{ //返回一個BOOL值,指明是否允許在按下回車鍵時結束編輯 //如果允許要調用resignFirstResponder 方法,這回導致結束編輯,而鍵盤會被收起 [textField resignFirstResponder];//查一下resign這個單詞的意思就明白這個方法了 return YES; }?????
? 通知
UITextField 派生自 UIControl ,所以 UIControl 類中的通知系統在文本字段中也可以使用。 除了 UIControl 類的標準事件,你還可以使用下列 UITextField 類特有的事件
UITextFieldTextDidBeginEditingNotification
UITextFieldTextDidChangeNotification
UITextFieldTextDidEndEditingNotification
當文本字段退出編輯模式時觸發。通知的 object 屬性存儲了最終文本。
因為文本字段要使用鍵盤輸入文字,所以下面這些事件發生時,也會發送動作通知
UIKeyboardWillShowNotification
鍵盤顯示之前發送
UIKeyboardDidShowNotification
鍵盤顯示之后發送
UIKeyboardWillHideNotification
鍵盤隱藏之前發送
UIKeyboardDidHideNotification
鍵盤隱藏之后發送
?
打開鍵盤卷動文本字段
默認情況下打開鍵盤會遮住下面的view,帶來一點點困擾,不過這不是什么大問題,我們使用點小小的手段就可以解決。
?
首先我們要知道鍵盤的高度是固定不變的,不過在IOS 5.0 以后鍵盤的高度貌似不是216了,不過不要緊,我們調整調整就是了:
?
iPhone | ipad | |
豎屏(portrait) | 216 | 264 |
橫屏(landScape) | 140 | 352 |
?
我們采取的方法就是在textField(有可能是其他控件)接收到彈出鍵盤事件時把self.view整體上移216px了(我們就以iPhone豎屏為例了)。
有關View的frame,origin,size之類的知識點不懂的請參看我的另一篇博文: 有關View的幾個基礎知識點-IOS開發 (實例)
?
首先我們要設置textField的代理,我們就設為當前控制器了。
?
textField,delegate=self;??
然后我們在當前控制器實現下面兩個委托方法:
- (void)textFieldDidBeginEditing:(UITextField *)textField { //當點觸textField內部,開始編輯都會調用這個方法。textField將成為first responder NSTimeInterval animationDuration = 0.30f; ? CGRect frame = self.view.frame; frame.origin.y -=216; frame.size.height +=216; self.view.frame = frame; [UIView beginAnimations:@"ResizeView" context:nil]; [UIView setAnimationDuration:animationDuration]; self.view.frame = frame; [UIView commitAnimations]; }
- (BOOL)textFieldShouldReturn:(UITextField *)textField {//當用戶按下ruturn,把焦點從textField移開那么鍵盤就會消失了 NSTimeInterval animationDuration = 0.30f; CGRect frame = self.view.frame;? ? frame.origin.y +=216;? ? frame.size. height -=216;? ? self.view.frame = frame; //self.view移回原位置 [UIView beginAnimations:@"ResizeView" context:nil]; [UIView setAnimationDuration:animationDuration]; self.view.frame = frame; [UIView commitAnimations]; [textField resignFirstResponder]; }?
實例:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //創建 UITextField *myTextField = [[UITextField alloc]initWithFrame:CGRectMake(50, 300, 200, 60)]; myTextField.delegate = self;//設置委托 //設置屬性 myTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;// 垂直對齊方式,可以注視掉看看默認是什么效果 myTextField.textAlignment = UITextAlignmentLeft;//默認就是左對齊,這個是UITextField擴展屬性 myTextField.borderStyle = UITextBorderStyleBezel;//默認是沒有邊框,如果使用了自定義的背景圖片邊框會被忽略掉 myTextField.placeholder = @"請在此輸入賬號";//為空白文本字段繪制一個灰色字符串作為占位符 myTextField.clearsOnBeginEditing = YES;//設置為YES當用點觸文本字段時,字段內容會被清除 myTextField.adjustsFontSizeToFitWidth = YES;//設置為YES時文本會自動縮小以適應文本窗口大小。默認是保持原來大小,而讓長文本滾動 //myTextField.background = [UIImage imageNamed:@"registBtn"];//可以接受UIImage對象,此項設置則邊框失效。 myTextField.clearButtonMode = UITextFieldViewModeUnlessEditing;//右邊顯示的'X'清楚按鈕 [self.view addSubview:myTextField];//顯示 myTextField = nil; } //委托方法 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ //返回一個BOOL值,指定是否循序文本字段開始編輯 return YES; } - (void)textFieldDidBeginEditing:(UITextField *)textField{ //開始編輯時觸發,文本字段將成為first responder //鍵盤遮住了文本字段,視圖整體上移 CGRect frame = self.view.frame; frame.origin.y -=120; frame.size.height +=120; self.view.frame = frame; } - (BOOL)textFieldShouldEndEditing:(UITextField *)textField{ //返回BOOL值,指定是否允許文本字段結束編輯,當編輯結束,文本字段會讓出first responder //要想在用戶結束編輯時阻止文本字段消失,可以返回NO //這對一些文本字段必須始終保持活躍狀態的程序很有用,比如即時消息 NSLog(@"here is code: %@",textField.text); return YES; } - (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ //當用戶使用自動更正功能,把輸入的文字修改為推薦的文字時,就會調用這個方法。 //這對于想要加入撤銷選項的應用程序特別有用 //可以跟蹤字段內所做的最后一次修改,也可以對所有編輯做日志記錄,用作審計用途。 //要防止文字被改變可以返回NO //這個方法的參數中有一個NSRange對象,指明了被改變文字的位置,建議修改的文本也在其中 return YES; } - (BOOL)textFieldShouldClear:(UITextField *)textField{ //返回一個BOOL值指明是否允許根據用戶請求清除內容 //可以設置在特定條件下才允許清除內容 return YES; } -(BOOL)textFieldShouldReturn:(UITextField *)textField{ //之前視圖上移了 現在移回來 CGRect frame = self.view.frame; frame.origin.y +=120; frame.size.height -=120; self.view.frame = frame; NSLog(@"textfield:%@", textField); //返回一個BOOL值,指明是否允許在按下回車鍵時結束編輯 //如果允許要調用resignFirstResponder 方法,這回導致結束編輯,而鍵盤會被收起 [textField resignFirstResponder];//查一下resign這個單詞的意思就明白這個方法了 return YES; }?
?
來源:? http://blog.csdn.net/iukey/article/details/7301150
?
?
UITextField 的密文設定方式
?
?
通常在輸入密碼或是制作一些特殊效果時,UITextField 會使用密文來保護所輸入的文字,下列我們將使用兩種不同的方式來示范如何設定 UITextField 的密文保護。
?
?一個最簡單又直接的方式,當介面上已經拉出一個 UITextField 時,我們可以透過 Interface Builder 直接設定,點選所要的 UITextField 點選屬性標籤頁 Attributes inspector,并找到 Secure 的 CheckBox 打勾即可,如下圖。
?
?
?另一種方式,就是從程式里面直接做設定,常用在動態產生 UITextField 時,其程式碼如下。
passwordTextField.secureTextEntry = YES;?
?來源: http://furnacedigital.blogspot.com/2011/04/uitextfield.html
?
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
