UITextField的詳細用法,包括具體協議(限制內容和大小等)

代碼建立UITextField


建立:


UITextField* myTextField = [[UITextField alloc]initWithFrame:CGRectMake(50, 100, 200, 50)]; 


基本屬性:
myTextField.textAlignment = UITextAlignmentLeft;//默認就是左對齊,這個是UITextField擴展屬性    
textUserName.borderStyle = UITextBorderStyleNone;//讓文本框四個角爲直角。
myTextField.borderStyle = UITextBorderStyleBezel;//默認是沒有邊框,若是使用了自定義的背景圖片邊框會被忽略掉    
myTextField.placeholder = @"請在此輸入帳號";//爲空白文本字段繪製一個灰色字符串做爲佔位符 ,能夠不用將clearsOnBeginEditing = YES    
myTextField.clearsOnBeginEditing = YES;//設置爲YES當用點觸文本字段時,字段內容會被清除    
myTextField.adjustsFontSizeToFitWidth = YES;//設置爲YES時文本會自動縮小以適應文本窗口大小。默認是保持原來大小,而讓長文本滾動    
//myTextField.background = [UIImage imageNamed:@"registBtn"];//能夠接受UIImage對象,此項設置則邊框失效。    
myTextField.clearButtonMode = UITextFieldViewModeUnlessEditing;//右邊顯示的'X'清除按鈕  
  textaPassword.clearButtonMode = UITextFieldViewModeWhileEditing;//當編輯的時候顯示X
passwordTextField.secureTextEntry = YES;//密碼輸入框
field.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;//UITextField垂直居中對齊。
 myTextField.delegate = self;//委託類須要遵照UITextFieldDelegate協議
 textUserName.font = [UIFont fontWithName:@"system" size:16];
 


重寫繪製行爲


 除了UITextField對象的風格選項,你還能夠定製化UITextField對象,爲他添加許多不一樣的重寫方法,來改變文本字段的顯示行爲。這些方法都會返回一個CGRect結構,制定了文本字段每一個部件的邊界範圍。若是你創見了一個自定義的UITextField類,你能夠重寫這些方法,這樣就能夠改變一個或多個邊界。必定不要直接調用 fan廣發;它們都是被iPhone運行庫調用的回調函數下面舉個例子:


這些方法都會返回一個CGRect結構。


 下列方法在建立一個UITextField的子類時能夠重寫:


 borderRectForBounds


 指定矩形邊界


 textRectForBounds


 指定顯示文本的邊界


 placeholderRectForBounds


 指定站位文本的邊界


 editingRectForBounds


 指定編輯中文本的邊界


 clearButtonRectForBounds


 指定顯示清除按鈕的邊界


 leftViewRectForBounds


 指定顯示左附着視圖的邊界


 rightViewRectForBounds


 指定顯示右附着視圖的邊界


  




委託方法


        UITextFieldDelegate是控件UITextField的委託,控件的委託主要負責響應控件事件或控制其餘對象。除了UITextField,WebView、UITableView等控件也有相應的委託對象。在m文件中viewDidLoad 方法self.textField.delegate = self語句極爲重要


      打開UITextFieldDelegate的API文檔,其中有4個有關編輯的方法,還要3個其它方法。






這裏咱們在編輯過程當中消息的發送,UITextField編輯過程當中與UITextFieldDelegate委託對象之間交互過程。






  


 - (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對象,指明瞭被改變文字的位置,建議修改的文本也在其中  


 [text isEqualToString:@"\n"]可用於判斷是否敲擊了回車鍵


      return YES;  


 }  


  


 例如:






 限制只能輸入特定的字符


  (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{


     NSCharacterSet *cs;


     cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS]invertedSet];


     NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@""]; //按cs分離出數組,數組按@""分離出字符串


    BOOL canChange = [string isEqualToString:filtered];


    return canChange;


 }


 上面那個NUMBERS是一個宏,能夠在文件頂部定義:


#define NUMBERS @」0123456789\n」 (這個表明能夠輸入數字和換行,請注意這個\n,若是不寫這個,Done按鍵將不會觸發,若是用在SearchBar中,將會不觸發Search事件,由於你本身限制不讓輸入\n,好慘,我在項目中才發現的。)


 因此,若是你要限制輸入英文和數字的話,就能夠把這個定義爲:


 #define kAlphaNum   @」ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″。


 固然,你還能夠在以上方法return以前,作一提示的,好比提示用戶只能輸入數字之類的。若是你以爲有須要的話。


 實現下面委託


 #define NUMBERS @「0123456789n」


-(BOOL)textField:(UITextField *)textField shouleChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{


NSCharacterSet *cs;


if(textField == phoneNumberField){


//未完待續


}}


  


 限制只能輸入必定長度的字符


  - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; 


{  //string就是此時輸入的那個字符 textField就是此時正在輸入的那個輸入框 返回YES就是能夠改變輸入框的值 NO相反


     if ([string isEqualToString:@"\n"])  //按會車能夠改變


     { 


         return YES; 


     } 


   NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; //獲得輸入框的內容


  if (self.myTextField == textField)  //判斷是否時咱們想要限定的那個輸入框


     { 


         if ([toBeString length] > 20) { //若是輸入框內容大於20則彈出警告


             textField.text = [toBeString substringToIndex:20]; 


             UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:nil message:@"超過最大字數不能輸入了" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil] autorelease]; 


             [alert show]; 


             return NO; 


         } 


     } 


     return YES; 


 }


//當文本框輸入文字時,隱藏錯誤提示信息


 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
     NSString *textString = [textField.text stringByReplacingCharactersInRange:range withString:string];
     if ([textString length] > 0) {
         msgLabel.hidden = YES;
     }
     return YES;
 }


  


- (BOOL)textFieldShouldClear:(UITextField *)textField{  


//返回一個BOOL值指明是否容許根據用戶請求清除內容  


//能夠設置在特定條件下才容許清除內容  


  return YES;  


 }  


-(BOOL)textFieldShouldReturn:(UITextField *)textField{  


      //返回一個BOOL值,指明是否容許在按下回車鍵時結束編輯,其實也就是和軟鍵盤中的return鍵經過Did End On Exit關聯。  


       //若是容許要調用resignFirstResponder 方法,這回致使結束編輯,而鍵盤會被收起[textField resignFirstResponder];


    return YES;  


}  


例如:


//點擊return,檢查用戶名和密碼是否都輸入了,若是用戶名位空,則光標定格在用戶名上,密碼爲空,則光標定格在密碼上,若都不爲空,則登陸。


 - (BOOL)textFieldShouldReturn:(UITextField *)textField {
     usernameText = textUserName.text;
     passwordText = textaPassword.text;
     if (usernameText == NULL || [usernameText isEqualToString:@""] ) {
         [textUserName becomeFirstResponder];//獲取控制權
    } else if (passwordText == NULL || [passwordText isEqualToString:@""]) {
         [textaPassword becomeFirstResponder];
     } else {
         [self clickLogin:loginButton];
     }
     return YES;
 }


 通知


UITextField派生自UIControl,因此UIControl類中的通知系統在文本字段中也可使用。除了UIControl類的標準事件,你還可使用下列UITextField類特有的事件


  UITextFieldTextDidBeginEditingNotification


 UITextFieldTextDidChangeNotification


 UITextFieldTextDidEndEditingNotification


 當文本字段退出編輯模式時觸發。通知的object屬性存儲了最終文本。


  由於文本字段要使用鍵盤輸入文字,因此下面這些事件發生時,也會發送動做通知


 UIKeyboardWillShowNotification   //鍵盤顯示以前發送


 UIKeyboardDidShowNotification    //鍵盤顯示以後發送


 UIKeyboardWillHideNotification   //鍵盤隱藏以前發送


 UIKeyboardDidHideNotification    //鍵盤隱藏以後發送 數組

轉載於women525的博客,連接爲:http://blog.csdn.net/women525/article/details/11113103 less

相關文章
相關標籤/搜索