UITextField与UITextView的区别
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
?UITextField繼承UIControl
?? ? 1.文字永遠(yuǎn)是一行,不能顯示多行文字
?? ? 2.有placehoder屬性設(shè)置占位文字
?? ? 3.繼承自UIControl
?? ? 4.監(jiān)聽(tīng)行為
?? ? 1> 設(shè)置代理
?? ? 2> addTarget:action:forControlEvents:
?? ? 3> 通知:UITextFieldTextDidChangeNotification
?
?UITextView繼承UIScrollView
? ? ?1.能顯示任意行文字
?? ? 2.不能設(shè)置占位文字
?? ? 3.繼承自UIScollView
?? ? 4.監(jiān)聽(tīng)行為
?? ? 1> 設(shè)置代理
?? ? 2> 通知:UITextViewTextDidChangeNotification
?
UITextField的詳細(xì)使用
1?設(shè)置邊框樣式,只有設(shè)置了才會(huì)顯示邊框樣式??
??text.borderStyle?=?UITextBorderStyleRoundedRect;2?輸入框中是否有個(gè)叉號(hào),在什么時(shí)候顯示,用于一次性刪除輸入框中的內(nèi)容
??text.clearButtonMode?=?UITextFieldViewModeAlways;typedef?enum?{UITextFieldViewModeNever,??重不出現(xiàn)UITextFieldViewModeWhileEditing,?編輯時(shí)出現(xiàn)UITextFieldViewModeUnlessEditing,??除了編輯外都出現(xiàn)UITextFieldViewModeAlways???一直出現(xiàn) }?UITextFieldViewMode;3?每輸入一個(gè)字符就變成點(diǎn)?用語(yǔ)密碼輸入
text.secureTextEntry?=?YES;?
4?是否糾錯(cuò)
??text.autocorrectionType?=?UITextAutocorrectionTypeNo;typedef?enum?{UITextAutocorrectionTypeDefault,?默認(rèn)UITextAutocorrectionTypeNo,???不自動(dòng)糾錯(cuò)UITextAutocorrectionTypeYes,??自動(dòng)糾錯(cuò) }?UITextAutocorrectionType;?
5?再次編輯就清空
??text.clearsOnBeginEditing?=?YES;?
6?內(nèi)容的垂直對(duì)齊方式??
UITextField繼承自UIControl,此類中有一個(gè)屬性contentVerticalAlignmenttext.contentVerticalAlignment?=?UIControlContentVerticalAlignmentCenter;?
7?設(shè)置為YES時(shí)文本會(huì)自動(dòng)縮小以適應(yīng)文本窗口大小??
??textFied.adjustsFontSizeToFitWidth?=?YES;//設(shè)置自動(dòng)縮小顯示的最小字體大小text.minimumFontSize?=?20;?
8?設(shè)置鍵盤(pán)的樣式
??text.keyboardType?=?UIKeyboardTypeNumberPad;typedef?enum?{UIKeyboardTypeDefault,???????默認(rèn)鍵盤(pán),支持所有字符?????????UIKeyboardTypeASCIICapable,??支持ASCII的默認(rèn)鍵盤(pán)UIKeyboardTypeNumbersAndPunctuation,??標(biāo)準(zhǔn)電話鍵盤(pán),支持+*#字符UIKeyboardTypeURL,????????????URL鍵盤(pán),支持.com按鈕?只支持URL字符 UIKeyboardTypeNumberPad,??????????????數(shù)字鍵盤(pán) UIKeyboardTypePhonePad,?????電話鍵盤(pán)UIKeyboardTypeNamePhonePad,???電話鍵盤(pán),也支持輸入人名 UIKeyboardTypeEmailAddress,???用于輸入電子?郵件地址的鍵盤(pán)????? UIKeyboardTypeDecimalPad,?????數(shù)字鍵盤(pán)?有數(shù)字和小數(shù)點(diǎn)UIKeyboardTypeTwitter,????????優(yōu)化的鍵盤(pán),方便輸入@、#字符UIKeyboardTypeAlphabet?=?UIKeyboardTypeASCIICapable,? }?UIKeyboardType;?
9?首字母是否大寫(xiě)
??text.autocapitalizationType?=?UITextAutocapitalizationTypeNone;typedef?enum?{UITextAutocapitalizationTypeNone,?不自動(dòng)大寫(xiě)UITextAutocapitalizationTypeWords,??單詞首字母大寫(xiě)UITextAutocapitalizationTypeSentences,??句子的首字母大寫(xiě)UITextAutocapitalizationTypeAllCharacters,?所有字母都大寫(xiě) }?UITextAutocapitalizationType;?
?
10 return鍵變成什么鍵?
??text.returnKeyType?=UIReturnKeyDone;typedef?enum?{UIReturnKeyDefault,?默認(rèn)?灰色按鈕,標(biāo)有ReturnUIReturnKeyGo,??????標(biāo)有Go的藍(lán)色按鈕UIReturnKeyGoogle,標(biāo)有Google的藍(lán)色按鈕,用語(yǔ)搜索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;?
11?鍵盤(pán)外觀
textView.keyboardAppearance=UIKeyboardAppearanceDefault;typedef?enum?{ UIKeyboardAppearanceDefault,?默認(rèn)外觀,淺灰色 UIKeyboardAppearanceAlert,?????深灰?石墨色 }?UIReturnKeyType;?
?12?最右側(cè)加圖片是以下代碼左側(cè)類似
????UIImageView?*image=[[UIImageView?alloc]?initWithImage:[UIImage?imageNamed:@"right.png"]];text.rightView=image;text.rightViewMode?=?UITextFieldViewModeAlways;?typedef?enum?{UITextFieldViewModeNever,UITextFieldViewModeWhileEditing,UITextFieldViewModeUnlessEditing,UITextFieldViewModeAlways }?UITextFieldViewMode;?
13?按return鍵鍵盤(pán)往下收??
[txtField?becomeFirstResponder];?????[text?resignFirstResponder]; [txtField?endEditing:YES];? [self.view?endEditing:YES];?
14 重寫(xiě)繪制行為
除了UITextField對(duì)象的風(fēng)格選項(xiàng),你還可以定制化UITextField對(duì)象,為他添加許多不同的重寫(xiě)方法,來(lái)改變文本字段的顯示行為。這些方法都會(huì)返回一個(gè)CGRect結(jié)構(gòu),制定了文本字段每個(gè)部件的邊界范圍。以下方法都可以重寫(xiě)。
–?textRectForBounds: ? ??//重寫(xiě)來(lái)重置文字區(qū)域
–?drawTextInRect: ? ? ? ??//改變繪文字屬性.重寫(xiě)時(shí)調(diào)用super可以按默認(rèn)圖形屬性繪制,若自己完全重寫(xiě)繪制函數(shù),就不用調(diào)用super了.
–?placeholderRectForBounds: //重寫(xiě)來(lái)重置占位符區(qū)域
–?drawPlaceholderInRect: //重寫(xiě)改變繪制占位符屬性.重寫(xiě)時(shí)調(diào)用super可以按默認(rèn)圖形屬性繪制,若自己完全重寫(xiě)繪制函數(shù),就不用調(diào)用super了.
–?borderRectForBounds: //重寫(xiě)來(lái)重置邊緣區(qū)域
–?editingRectForBounds: //重寫(xiě)來(lái)重置編輯區(qū)域
–?clearButtonRectForBounds: //重寫(xiě)來(lái)重置clearButton位置,改變size可能導(dǎo)致button的圖片失真
–?leftViewRectForBounds:
–?rightViewRectForBounds:
?
15 委托方法
-?(BOOL)textFieldShouldBeginEditing:(UITextField?*)textField{?? //返回一個(gè)BOOL值,指定是否循序文本字段開(kāi)始編輯??return?YES;?? }??-?(void)textFieldDidBeginEditing:(UITextField?*)textField{??//開(kāi)始編輯時(shí)觸發(fā),文本字段將成為first?responder?? }??-?(BOOL)textFieldShouldEndEditing:(UITextField?*)textField{?? //返回BOOL值,指定是否允許文本字段結(jié)束編輯,當(dāng)編輯結(jié)束,文本字段會(huì)讓出first?responder??//要想在用戶結(jié)束編輯時(shí)阻止文本字段消失,可以返回NO??//這對(duì)一些文本字段必須始終保持活躍狀態(tài)的程序很有用,比如即時(shí)消息??return?NO;?? }??-?(BOOL)textField:(UITextField*)textField?shouldChangeCharactersInRange:(NSRange)range?replacementString:(NSString?*)string{?? //當(dāng)用戶使用自動(dòng)更正功能,把輸入的文字修改為推薦的文字時(shí),就會(huì)調(diào)用這個(gè)方法。?? //這對(duì)于想要加入撤銷選項(xiàng)的應(yīng)用程序特別有用?? //可以跟蹤字段內(nèi)所做的最后一次修改,也可以對(duì)所有編輯做日志記錄,用作審計(jì)用途。????? //要防止文字被改變可以返回NO?? //這個(gè)方法的參數(shù)中有一個(gè)NSRange對(duì)象,指明了被改變文字的位置,建議修改的文本也在其中??return?YES;?? }??-?(BOOL)textFieldShouldClear:(UITextField?*)textField{??//返回一個(gè)BOOL值指明是否允許根據(jù)用戶請(qǐng)求清除內(nèi)容?? //可以設(shè)置在特定條件下才允許清除內(nèi)容??return?YES;?? }??-(BOOL)textFieldShouldReturn:(UITextField?*)textField{??//返回一個(gè)BOOL值,指明是否允許在按下回車(chē)鍵時(shí)結(jié)束編輯??//如果允許要調(diào)用resignFirstResponder?方法,這回導(dǎo)致結(jié)束編輯,而鍵盤(pán)會(huì)被收起[textField?resignFirstResponder]; //查一下resign這個(gè)單詞的意思就明白這個(gè)方法了??return?YES;?? }?
16?通知
UITextField派生自UIControl,所以UIControl類中的通知系統(tǒng)在文本字段中也可以使用。除了UIControl類的標(biāo)準(zhǔn)事件,你還可以使用下列UITextField類特有的事件
UITextFieldTextDidBeginEditingNotification UITextFieldTextDidChangeNotification UITextFieldTextDidEndEditingNotification當(dāng)文本字段退出編輯模式時(shí)觸發(fā)。通知的object屬性存儲(chǔ)了最終文本。
因?yàn)槲谋咀侄我褂面I盤(pán)輸入文字,所以下面這些事件發(fā)生時(shí),也會(huì)發(fā)送動(dòng)作通知
UIKeyboardWillShowNotification???//鍵盤(pán)顯示之前發(fā)送 UIKeyboardDidShowNotification????//鍵盤(pán)顯示之后發(fā)送 UIKeyboardWillHideNotification???//鍵盤(pán)隱藏之前發(fā)送 UIKeyboardDidHideNotification????//鍵盤(pán)隱藏之后發(fā)送?
UITextField的運(yùn)用
1 限制只能輸入特定的字符
?-(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; }?上面那個(gè)NUMBERS是一個(gè)宏,可以在文件頂部定義:
#define NUMBERS @”0123456789\n”?(這個(gè)代表可以輸入數(shù)字和換行,請(qǐng)注意這個(gè)\n,如果不寫(xiě)這個(gè),Done按鍵將不會(huì)觸發(fā),如果用在SearchBar中,將會(huì)不觸發(fā)Search事件,因?yàn)槟阕约合拗撇蛔屳斎隲n,好慘,我在項(xiàng)目中才發(fā)現(xiàn)的。)
所以,如果你要限制輸入英文和數(shù)字的話,就可以把這個(gè)定義為:
#define kAlphaNum ? @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″。
當(dāng)然,你還可以在以上方法return之前,做一提示的,比如提示用戶只能輸入數(shù)字之類的。如果你覺(jué)得有需要的話。
?
2 限制只能輸入一定長(zhǎng)度的字符
?-?(BOOL)textField:(UITextField?*)textField?shouldChangeCharactersInRange:(NSRange)range?replacementString:(NSString?*)string;? {??//string就是此時(shí)輸入的那個(gè)字符?textField就是此時(shí)正在輸入的那個(gè)輸入框?返回YES就是可以改變輸入框的值?NO相反 if?([string?isEqualToString:@"\n"])??//按會(huì)車(chē)可以改變{?return?YES;?}?NSString?*?toBeString?=?[textField.text?stringByReplacingCharactersInRange:range?withString:string];?//得到輸入框的內(nèi)容if?(self.myTextField?==?textField)??//判斷是否時(shí)我們想要限定的那個(gè)輸入框{?if?([toBeString?length]?>?20)?{?//如果輸入框內(nèi)容大于20則彈出警告textField.text?=?[toBeString?substringToIndex:20];?UIAlertView?*alert?=?[[[UIAlertView?alloc]?initWithTitle:nil?message:@"超過(guò)最大字?jǐn)?shù)不能輸入了"?delegate:nil?cancelButtonTitle:@"Ok"?otherButtonTitles:nil,?nil]?autorelease];?[alert?show];?return?NO;?}?}?return?YES;? }?
3 編輯時(shí)候,視圖在鍵盤(pán)頂部
self.textField.delegate?=?self; #pragma?mark?-?UITextField -?(void)textFieldDidBeginEditing:(UITextField?*)textField {//1.發(fā)送監(jiān)控鍵盤(pán)通知[[NSNotificationCenter?defaultCenter]?addObserver:self?selector:@selector(keyboardDidChangeFrame:)?name:UIKeyboardWillChangeFrameNotification?object:nil];}-?(void)keyboardDidChangeFrame:(NSNotification?*)notification {????//視圖坐標(biāo)變化NSDictionary?*userInfo?=?notification.userInfo;//動(dòng)作時(shí)間double?duration?=?[userInfo[UIKeyboardAnimationDurationUserInfoKey]?doubleValue];//鍵盤(pán)彈出結(jié)束的frameCGRect?keyBoardRect?=?[userInfo[UIKeyboardFrameEndUserInfoKey]?CGRectValue];if?(CGRectGetMaxY(self.scrollView.frame)?>=?keyBoardRect.origin.y)?{[UIView?animateWithDuration:duration?animations:^{self.view.y?=?keyBoardRect.origin.y?-?self.view.height?+?self.viewIndex;}];}} //3.?釋放通知 -?(void)didReceiveMemoryWarning?{[super?didReceiveMemoryWarning];[[NSNotificationCenter?defaultCenter]?removeObserver:self];}轉(zhuǎn)載于:https://my.oschina.net/u/2346786/blog/500392
總結(jié)
以上是生活随笔為你收集整理的UITextField与UITextView的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BZOJ2888 : 资源运输
- 下一篇: 精品软件 推荐 百度杀毒 软件