1.UITextField
UITextField繼承自UIView睡陪,只能單行輸入,可換行
1.1屬性
屬性補(bǔ)充:
1.光標(biāo)的顏色:nameField.tintColor = [UIColor blueColor];
2.設(shè)置UITextField的文字大小和字體:
field.font=[UIFont fontWithName:@"Times New Roman" size:20];
3.根據(jù)輸入文字動(dòng)態(tài)調(diào)整字體大小,需設(shè)置一個(gè)最小字體大写竺汀:
textField.adjustsFontSizeToFitWidth = YES;
textField.minimumFontSize = 10.0; //設(shè)置最小字體
4.文本框是否可編輯 不寫時(shí) 默認(rèn) YES 可編輯:
field.enabled = NO;
5.輸入框默認(rèn)輸入文本,有時(shí)需求UITextField只可顯示不可編輯的,此時(shí)起展示作用:用此屬性設(shè)置需要顯示的文本然后設(shè)置UITextField不可交互:
textField.userInteractionEnabled = NO;
6.用tag給文本框做一個(gè)標(biāo)記:
//做標(biāo)記
nameField.tag = 500;
//通過標(biāo)記 找到UITextField
UITextField *field =(UITextField *)[self.view viewWithTag:500];
7.可以定制邊框
//===邊框線條的粗細(xì)
field.layer.borderWidth = 1;
//====邊框線倒角
field.layer.cornerRadius = 10;
//====邊框線條顏色
field.layer.borderColor = [UIColor grayColor].CGColor;
8.設(shè)置將文字顯示成掩碼(密碼框)
nameField.secureTextEntry = YES;
9.設(shè)置清除按鈕的模式(有文字就有清除按鈕)
nameField.clearButtonMode = UITextFieldViewModeAlways;// 這個(gè)是總顯示
#import "YCTextField.h"
#import <objc/runtime.h>
#define YCplaceholderTextColor @"_placeholderLabel.textColor"
@implementation YCTextField
+ (void)initialize {
[self getIvars];
}
// 獲取私有變量名稱
+ (void)getIvars {
unsigned int count = 0;
Ivar *ivars = class_copyIvarList([UITextField class], &count);
for (int i = 0; i < count; i++) {
Ivar ivar = ivars[i];
NSLog(@"%s----%s", ivar_getName(ivar),
ivar_getTypeEncoding(ivar));
}
}
- (void)awakeFromNib {
// 設(shè)置光標(biāo)的顏色
self.tintColor = self.textColor;
}
// 獲取到焦點(diǎn)
- (BOOL)becomeFirstResponder {
// 利用運(yùn)行時(shí)獲取key,設(shè)置占位文字的顏色
[self setValue:self.textColor forKeyPath:YCplaceholderTextColor];
return [super becomeFirstResponder];
}
// ===失去焦點(diǎn)====
- (BOOL)resignFirstResponder {
// 利用運(yùn)行時(shí)獲取key,設(shè)置占位文字的顏色
[self setValue:[UIColor grayColor] forKeyPath:YCplaceholderTextColor];
return [super resignFirstResponder];
}
@end
原理如下圖:
UITextfield在storyboard中設(shè)置屬性
詳解部分屬性:
iOS 輸入框(UITextField)密碼明暗文切換:
在做明暗文切換(密碼輸入框)的時(shí)候遇見一個(gè)坑淀零,就是切換secureTextEntry的時(shí)候挽绩,輸入框的光標(biāo)會(huì)偏移,下面列出了一個(gè)解決辦法及一種明暗文切換的方法驾中。
切換到密文狀態(tài),再次編輯時(shí),內(nèi)容清空
重現(xiàn):
1.切換明密文狀態(tài),最后在密文狀態(tài),再次編輯,輸入任意字符,內(nèi)容清空;2.其他textField獲取焦點(diǎn),再切回來(密文狀態(tài)),內(nèi)容清空
解決方法:
如下圖
http://jingyan.baidu.com/article/f71d6037a75b2b1ab741d166.html
1.2代理方法
- (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)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString* number= Knum;
NSPredicate *numberPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",number];
return [numberPre evaluateWithObject:string];
}
上面那個(gè)Knum是一個(gè)宏祟蚀,可以在文件頂部定義:
#define Knum @"^[0-9]+$"
如果你要限制輸入英文的話,就可以把這個(gè)定義為:
#define Knum @"^[A-Za-z]+$"
備注:這些正則||謂詞請(qǐng)看相關(guān)文檔
當(dāng)然占调,你還可以在以上方法return之前暂题,做一提示的,比如提示用戶只能輸入數(shù)字之類的究珊。
如果你覺得有需要的話薪者。限制只能輸入一定長(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ì)車可以改變 {
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:@"超過最大字?jǐn)?shù)不能輸入了" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil] autorelease];
[alert show]; return NO;
}
}
return YES;
}
- 限定只能輸入數(shù)字(其他限制:http://www.reibang.com/p/4b9957f2afc2)
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
return [self validateNumber:string];
}
- (BOOL)validateNumber:(NSString*)number {
BOOL res = YES;
NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
int i = 0;
while (i < number.length) {
NSString * string = [number substringWithRange:NSMakeRange(i, 1)];
NSRange range = [string rangeOfCharacterFromSet:tmpSet];
if (range.length == 0) {
res = NO;
break;
}
i++;
}
return res;
}
1.3通知
1.4限制UITextField的輸入字?jǐn)?shù)
輸入控制小數(shù)點(diǎn)后位數(shù)(開發(fā)筆記四的27):http://www.reibang.com/p/5cc95f9d4c2e
方法一:
接上面的這個(gè)方法
鏈接:http://blog.csdn.net/jasonblog/article/details/23771117/
http://blog.csdn.net/blackwolfsky/article/details/51264060
方法二:
相關(guān)鏈接:http://www.reibang.com/p/900739fb1b11
1.5 UITextField寬度自適應(yīng)
- 創(chuàng)建UITextField的category:
- 使用:
1.6一個(gè)頁(yè)面同時(shí)有兩個(gè)UITextField,點(diǎn)擊其中一個(gè)的時(shí)候不讓另外一個(gè)的鍵盤響應(yīng)
2.UITextView
2.1繼承于UIScrollView剿涮,所以它具有UIScrollView的屬性和方法
Delegate
//網(wǎng)址是否可以連接
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
return YES;
}
//文字出現(xiàn)改變就執(zhí)行:文字能否更改
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
//點(diǎn)擊return收回鍵盤
if ([text isEqualToString:@"\n"]) {
[textView resignFirstResponder];
}
return YES;
}
3.占位符的定制
http://www.reibang.com/p/9edb8be75e0b
3.1 UITextField的占位符位置
將占位符位置居中(屬性方法):attributedPlaceholder
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.alignment = NSTextAlignmentCenter;
NSAttributedString *attri = [[NSAttributedString alloc] initWithString:@"請(qǐng)輸入推薦人的手機(jī)號(hào)" attributes:@{NSForegroundColorAttributeName:[UToColor grayColor],NSFontAttributeName:[UToFont defaultAdaptationFontWithSize:16], NSParagraphStyleAttributeName:style}];
_phoneTF.attributedPlaceholder = attri;
3.2 UITextField的占位符顏色定制
Category占位字符顏色定制:http://www.reibang.com/p/a1db5575528b
3.3 UITextView定制(含占位符字體 & 顏色定制)
控制器中調(diào)用:
@property (nonatomic, strong) UToDescriptionTextView *desTextView;
效果: