進入本文之前建議你認真讀一讀我的另一篇博文:《UIControl IOS控制項編程—IOS開發》http://blog.csdn.net/iukey/article/details/7300412
這樣會起到事半功倍效果。
再就是用到UITextField,肯定離不開鍵盤啦,所以還有一片博文推薦:《UIKeyboard鍵盤相關知識點》
為什麼要看另一篇關於UIControl的文章呢?因為UITextField繼承自UIControl類,很多UIControl的屬性、方法、通知等完全適用於UITextField,而那些屬於UIControl的東西我又不會在此贅述。(主要是減輕文章的長度,以最少的文字最通俗易懂講明白一個知識點是我追求的目標。)
建立
UITextField* myTextField = [[UITextField alloc]initWithFrame:CGRectMake(50, 100, 200, 50)];
純程式碼建立View請參看我的另一片博文:《有關View的幾個基礎知識點》http://blog.csdn.net/iukey/article/details/7083165
設定委託
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開發》
把寫文章時敲的代碼附上UITextField 文字欄位控制項Demo