建立:
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