屬性:
@property(nullable,readwrite,strong)UIView*inputView;
//讓彈出的鍵盤是一個UIPickerViewself.inputView= pickView;
@property(nullable,nonatomic,weak)id delegate//監(jiān)聽鍵盤初始化(編輯默認(rèn)設(shè)置) /值改變/結(jié)束編輯等delegate=self
@property(nonatomic)UITextBorderStyleborderStyle;//默認(rèn)為空
self.dateTextF.borderStyle=UITextBorderStyleRoundedRect;//圓角邊框 ? ? ? ? ? ? ? ?? (drawn疲憊的,憔悴的)
@property(nullable,nonatomic,copy)NSString*placeholder;//default is nil. string is drawn 70% gray灰色的
代理方法:
//是否允許文字改變(攔截用戶輸入)
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string{
//當(dāng)用戶使用自動更正功能渺杉,把輸入的文字修改為推薦的文字時,就會調(diào)用這個方法。
//這對于想要加入撤銷選項的應(yīng)用程序特別有用
//可以跟蹤字段內(nèi)所做的最后一次修改芯咧,也可以對所有編輯做日志記錄,用作審計用途营密。
//要防止文字被改變可以返回NO
//這個方法的參數(shù)中有一個NSRange對象遵倦,指明了被改變文字的位置该默,建議修改的文本也在其中
returnNO;
}
//限制只能輸入特定的字符
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSCharacterSet *cs;
cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS]invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@""];?//按cs分離出數(shù)組,數(shù)組按@""分離出字符串
BOOL canChange = [string isEqualToString:filtered];
return canChange;
}
上面那個NUMBERS是一個宏案糙,可以在文件頂部定義:
#define NUMBERS @”0123456789\n”?(這個代表可以輸入數(shù)字和換行绊诲,請注意這個\n送粱,如果不寫這個,Done按鍵將不會觸發(fā)掂之,如果用在SearchBar中抗俄,將會不觸發(fā)Search事件,因為你自己限制不讓輸入\n世舰,好慘动雹,我在項目中才發(fā)現(xiàn)的。)
所以跟压,如果你要限制輸入英文和數(shù)字的話胰蝠,就可以把這個定義為:
#define kAlphaNum?? @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″。
當(dāng)然,你還可以在以上方法return之前姊氓,做一提示的丐怯,比如提示用戶只能輸入數(shù)字之類的。如果你覺得有需要的話翔横。
限制只能輸入一定長度的字符
- (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];?//得到輸入框的內(nèi)容
if (self.myTextField == textField)??//判斷是否時我們想要限定的那個輸入框
{
if ([toBeString length] > 20) {?//如果輸入框內(nèi)容大于20則彈出警告
textField.text = [toBeString substringToIndex:20];
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:nil message:@"超過最大字?jǐn)?shù)不能輸入了" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil] autorelease];
[alert show];
return NO;
}
}
return YES;
}
//是否允許開始編輯
- (BOOL)textFieldShouldBeginEditing:(UITextField*)textField {
returnYES;
}
//開始編輯時調(diào)用(文本框成為第一響應(yīng)者的時候調(diào)用)*初始化點擊賦值
- (void)textFieldDidBeginEditing:(UITextField*)textField {
NSLog(@“開始編輯”);//文本框?qū)⒊蔀閒irst?responder
}
//是否允許結(jié)束編輯
- (BOOL)textFieldShouldEndEditing:(UITextField*)textField {
returnYES;
}
//結(jié)束編輯時調(diào)用
- (void)textFieldDidEndEditing:(UITextField*)textField {
NSLog(@“結(jié)束編輯");//文本框?qū)⒆Nfirst?responder
//這對一些文本字段必須始終保持活躍狀態(tài)的程序很有用读跷,比如即時消息
}
//按return鍵鍵盤往下收becomeFirstResponder成為
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[text resignFirstResponder];//注銷
return YES;
}
-?(BOOL)textFieldShouldClear:(UITextField?*)textField{
//返回一個BOOL值指明是否允許根據(jù)用戶請求清除內(nèi)容
//可以設(shè)置在特定條件下才允許清除內(nèi)容
return?YES;
}
//指明是否允許在按下回車鍵時結(jié)束編輯
-(BOOL)textFieldShouldReturn:(UITextField?*)textField{
//如果允許,會導(dǎo)致結(jié)束編輯,自動調(diào)用[textField?resignFirstResponder];
//查一下resign這個單詞的意思就明白這個方法了
return?YES;
}
經(jīng)驗,可能用到:
//開始編輯選中第一列的第一行.
創(chuàng)建分類
,用于代理方法中調(diào)用自定義對象方法.運行時會檢測到真實類型
//彈出鍵盤類型
textFF.keyboardType = UIKeyboardTypeNumberPad;
//透明占位符,水印提示
textFF.placeholder = @"占位符";
//密文輸入
textFF.secureTextEntry = YES;
//重新編輯時先清空輸入
textFF.clearsOnBeginEditing = YES;
//輸入文字內(nèi)容居中
textFF.textAlignment = NSTextAlignmentCenter;
//輸入文字內(nèi)容居上
textFF.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
//圖層邊框?qū)挾?/p>
textFF.layer.borderWidth = 0.6;
//圖層邊框顏色
textFF.layer.borderColor = [UIColor redColor].CGColor;
//圖層背景顏色
textFF.layer.backgroundColor = [UIColor blueColor].CGColor;
//設(shè)置邊框樣式,只有設(shè)置了才會顯示邊框樣式
text.borderStyle = UITextBorderStyleRoundedRect;
//設(shè)置背景
text.background = [UIImage imageNamed:@"dd.png"];
//設(shè)置輸入框內(nèi)容的字體樣式和大小
text.font = [UIFont fontWithName:@"Arial" size:20.0f];
//設(shè)置字體顏色
text.textColor = [UIColor redColor];
//編輯時提供一次性清除按鈕
textFF.clearButtonMode=UITextFieldViewModeWhileEditing;
//輸入框中一開始就有的文字
text.text = @"一開始就在輸入框的文字";
//是否糾錯
text.autocorrectionType = UITextAutocorrectionTypeNo;
/設(shè)置為YES時文本會自動縮小以適應(yīng)文本窗口大小.默認(rèn)是保持原來大小,而讓長文本滾動
textFied.adjustsFontSizeToFitWidth = YES;
/設(shè)置為YES時文本會自動縮小以適應(yīng)文本窗口大小.默認(rèn)是保持原來大小,而讓長文本滾動
textFied.adjustsFontSizeToFitWidth = YES;
//最右側(cè)加圖片是以下代碼???左側(cè)類似
UIImageView *image=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"right.png"]];
text.rightView=image;
text.rightViewMode = UITextFieldViewModeAlways;
//設(shè)置鍵盤的樣式
text.keyboardType = UIKeyboardTypeNumberPad;
typedef enum {//鍵盤樣式
UIKeyboardTypeDefault,???????默認(rèn)鍵盤禾唁,支持所有字符
UIKeyboardTypeASCIICapable,??支持ASCII的默認(rèn)鍵盤
UIKeyboardTypeNumbersAndPunctuation,??標(biāo)準(zhǔn)電話鍵盤效览,支持+*#字符
UIKeyboardTypeURL,??????????? URL鍵盤,支持.com按鈕?只支持URL字符
UIKeyboardTypeNumberPad,??????????????數(shù)字鍵盤
UIKeyboardTypePhonePad,?????電話鍵盤
UIKeyboardTypeNamePhonePad,???電話鍵盤荡短,也支持輸入人名
UIKeyboardTypeEmailAddress,???用于輸入電子?郵件地址的鍵盤
UIKeyboardTypeDecimalPad,?????數(shù)字鍵盤?有數(shù)字和小數(shù)點
UIKeyboardTypeTwitter,????????優(yōu)化的鍵盤丐枉,方便輸入@、#字符
UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable,
} UIKeyboardType;
//首字母是否大寫UITextAutocapitalizationType
text.autocapitalizationType = UITextAutocapitalizationTypeNone;
typedef enum {
UITextAutocapitalizationTypeNone,?不自動大寫
UITextAutocapitalizationTypeWords,??單詞首字母大寫UITextAutocapitalizationTypeSentences,??句子的首字母大寫
UITextAutocapitalizationTypeAllCharacters,?所有字母都大寫
} UITextAutocapitalizationType;
//return鍵變成什么鍵UIReturnKeyType
text.returnKeyType =UIReturnKeyDone;
typedef enum {
UIReturnKeyDefault,?默認(rèn)?灰色按鈕掘托,標(biāo)有Return
UIReturnKeyGo,??????標(biāo)有Go的藍(lán)色按鈕
UIReturnKeyGoogle,標(biāo)有Google的藍(lán)色按鈕瘦锹,用語搜索
UIReturnKeyJoin,標(biāo)有Join的藍(lán)色按鈕
UIReturnKeyNext,標(biāo)有Next的藍(lán)色按鈕
UIReturnKeyRoute,標(biāo)有Route的藍(lán)色按鈕
UIReturnKeySearch,標(biāo)有Search的藍(lán)色按鈕
UIReturnKeySend,標(biāo)有Send的藍(lán)色按鈕
UIReturnKeyYahoo,標(biāo)有Yahoo的藍(lán)色按鈕
UIReturnKeyYahoo,標(biāo)有Yahoo的藍(lán)色按鈕
UIReturnKeyEmergencyCall,?緊急呼叫按鈕
} UIReturnKeyType;
//鍵盤外觀
textView.keyboardAppearance=UIKeyboardAppearanceDefault;
typedef enum {
UIKeyboardAppearanceDefault,?默認(rèn)外觀闪盔,淺灰色UIKeyboardAppearanceAlert弯院,?????深灰?石墨色
} UIReturnKeyType;
重寫繪制行為
除了UITextField對象的風(fēng)格選項,你還可以定制化UITextField對象泪掀,為他添加許多不同的重寫方法听绳,來改變文本字段的顯示行為。這些方法都會返回一個CGRect結(jié)構(gòu)异赫,制定了文本字段每個部件的邊界范圍椅挣。以下方法都可以重寫。
–?textRectForBounds: ????//重寫來重置文字區(qū)域
–?drawTextInRect: ????????//改變繪文字屬性.重寫時調(diào)用super可以按默認(rèn)圖形屬性繪制,若自己完全重寫繪制函數(shù)塔拳,就不用調(diào)用super了.
–?placeholderRectForBounds: //重寫來重置占位符區(qū)域
–?drawPlaceholderInRect: //重寫改變繪制占位符屬性.重寫時調(diào)用super可以按默認(rèn)圖形屬性繪制,若自己完全重寫繪制函數(shù)鼠证,就不用調(diào)用super了.
–?borderRectForBounds: //重寫來重置邊緣區(qū)域
–?editingRectForBounds: //重寫來重置編輯區(qū)域
–?clearButtonRectForBounds: //重寫來重置clearButton位置,改變size可能導(dǎo)致button的圖片失真
–?leftViewRectForBounds:
–?rightViewRectForBounds: