UITextField详解

本文自己总结和整理了其他的文章



  • text属性:plain常规的。attributed属性可以更改一个label文字,中不同的颜色。
  • color:改变字体颜色;
  • font:改变文字字体和文字大小;
  • alignment:文字对齐方式;
  • Placeholder:在输入框没有文字的时候的灰色提示性文字。当这个文本框中输入了数据时,用于提示的灰色的字将会自动消失;
  • Background:设置背景图片,Border Style选择最后一个的时候没有效果
  • Disabled : 禁用时候的图片
  • Border Style : 选择边界风格。
  • Clear Button : 这是一个下拉菜单,你可以选择清除按钮什么时候出现,所谓清除按钮就是出一个现在文本框右边的小 X ,你可以有以下选择:

    Never appears : 从不出现
    Appears while editing : 编辑时出现
    Appears unless editing : 不在编辑时出现(一般不咋用)

    Is always visible : 总是可见


  • Clear when editing begins : 若选中此项,则当开始编辑这个文本框时,文本框中之前的内容会被清除掉。
  • Min Font Size : 设置文本框可以显示的最小字体
  • Adjust To Fit : 指定当文本框尺寸减小时,文本框中的文本是否也要缩小。选择它,可以使得全部文本都可见,即使文本很长。但是这个选项要跟 Min Font Size 配合使用,文本再缩小,也不会小于设定的 Min Font Size 。
  • 下面设置键盘的类型和显示方式。
  • Captitalization : 设置大写。下拉菜单中有四个选项:

    None:不设置大写
    Words:每个单词首字母大写,这里的单词指的是以空格分开的字符串

    Sentances:每个句子的第一个字母大写,这里的句子是以句号加空格分开的字符串

    All Characters: 所以字母大写
  • Correction : 检查拼写,默认是 YES 
  • Keyboard : 选择键盘类型,比如全数字、字母和数字和适合输入Emil等。
  • Appearance:两种键盘风格。Dark是暗色系的,黑色的键盘。Light是亮色的系的,白色键盘。
  • Return Key : 选择返回键类型,可以选择 Search 、 Return 、 Done 等。
  • Secure : 当你的文本框用作密码输入框时,可以选择这个选项,此时,字符显示为星号。
  • Alignment Horizontal :水平对齐方式
  • Alignment Vertical :垂直对齐方式
  • Content:用于返回一个BOOL值  输入框是否 Selected(选中) Enabled(可用) Highlighted(高亮)
  • View:这是摁钮下面的一个自带的view的属性。设置这个同时也就设置了这个Button。如设置了这个Alpha或者Hidden,或者设这tag也就是设置这个Button。

代码实现:

1.建立初始化一个textfield

UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 100, 100)]; 

2.设置边框样式

text.borderStyle = UITextBorderStyleRoundedRect; // 不设置显示默认的

typedef enum {
    UITextBorderStyleNone, 
    UITextBorderStyleLine,
    UITextBorderStyleBezel,
    UITextBorderStyleRoundedRect  
} UITextBorderStyle;

2.设置输入框背景颜色

text.backgroundColor = [UIColor whiteColor];  // 如果设置为白色,设置的背景图片会被边框忽略掉

3.设置提示性文字

text.placeholder = @"password"; 	// 当输入框没有内容时提示为password,一旦输入内容了,这个提示会被清空,内容为空时,又会显示

4.设置输入框一开始的文字

text.text = @"1234567890";  

5.设置输入框内容的字体和大小

text.font = [UIFont fontWithName:@"Arial" size:20.0f];  

6.设置字体颜色

text.textColor = [UIColor redColor];  

7.设置输入框右侧一次性清除小叉的摁钮

text.clearButtonMode = UITextFieldViewModeAlways; 

typedef enum {
    UITextFieldViewModeNever,  从不出现
    UITextFieldViewModeWhileEditing, 编辑时出现
    UITextFieldViewModeUnlessEditing,  除了编辑外都出现
    UITextFieldViewModeAlways   一直出现
} UITextFieldViewMode;

8.设置密码保护,每一个字符都变成星号

text.secureTextEntry = YES; 

9.设置是否自动纠错

text.autocorrectionType = UITextAutocorrectionTypeNo;  

typedef enum {
    UITextAutocorrectionTypeDefault, 默认
    UITextAutocorrectionTypeNo,   不自动纠错
    UITextAutocorrectionTypeYes,  自动纠错
} UITextAutocorrectionType;

10.设置再次编辑时输入框为空

text.clearsOnBeginEditing = YES;

11.设置内容对齐方式

text.textAlignment = NSTextAlignmentLeft;  // 左对齐


12.设置内容的垂直对齐方式


text.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;


13.设置内容自适应输入框大小

text.adjustsFontSizeToFitWidth = YES;

14.设置自适应大小后的最小字体

text.minimumFontSize = 20; 


15.设置键盘样式

text.keyboardType = UIKeyboardTypeNumberPad; 

typedef enum {
    UIKeyboardTypeDefault,       默认键盘,支持所有字符         
    UIKeyboardTypeASCIICapable,  支持ASCII的默认键盘
    UIKeyboardTypeNumbersAndPunctuation,  标准电话键盘,支持+*#字符
    UIKeyboardTypeURL,            URL键盘,支持.com按钮 只支持URL字符
UIKeyboardTypeNumberPad,              数字键盘
UIKeyboardTypePhonePad,    电话键盘
    UIKeyboardTypeNamePhonePad,   电话键盘,也支持输入人名
UIKeyboardTypeEmailAddress,   用于输入电子 邮件地址的键盘     
UIKeyboardTypeDecimalPad,     数字键盘 有数字和小数点
    UIKeyboardTypeTwitter,        优化的键盘,方便输入@、#字符
    UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, 
} UIKeyboardType;

16.设置首字母是否大写

text.autocapitalizationType = UITextAutocapitalizationTypeNone; 

typedef enum {
    UITextAutocapitalizationTypeNone, 不自动大写
    UITextAutocapitalizationTypeWords,  单词首字母大写
    UITextAutocapitalizationTypeSentences,  句子的首字母大写
    UITextAutocapitalizationTypeAllCharacters, 所有字母都大写
} UITextAutocapitalizationType;


17.设置return键样式

text.returnKeyType =UIReturnKeyDone; 

typedef enum {
    UIReturnKeyDefault, 默认 灰色按钮,标有Return
    UIReturnKeyGo,      标有Go的蓝色按钮
    UIReturnKeyGoogle, 标有Google的蓝色按钮,用语搜索
    UIReturnKeyJoin, 标有Join的蓝色按钮
    UIReturnKeyNext, 标有Next的蓝色按钮
    UIReturnKeyRoute, 标有Route的蓝色按钮
    UIReturnKeySearch, 标有Search的蓝色按钮
    UIReturnKeySend, 标有Send的蓝色按钮
    UIReturnKeyYahoo, 标有Yahoo的蓝色按钮
    UIReturnKeyYahoo, 标有Yahoo的蓝色按钮
    UIReturnKeyEmergencyCall, 紧急呼叫按钮
} UIReturnKeyType;


18.设置键盘外观

textView.keyboardAppearance=UIKeyboardAppearanceDefault;

typedef enum {
UIKeyboardAppearanceDefault, 默认外观,浅灰色
UIKeyboardAppearanceAlert,     深灰 石墨色
} UIReturnKeyType;


19.设置代理

text.delegate = self; 


20.把创建好的输入框添加到视图中

[self.view addSubview:text]; 


21.设置输入框最右侧图片(左侧类似)

UIImageView *image=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"right.png"]]; 
text.rightView=image;
text.rightViewMode = UITextFieldViewModeAlways; 

ypedef enum {
    UITextFieldViewModeNever,
    UITextFieldViewModeWhileEditing,
    UITextFieldViewModeUnlessEditing,
    UITextFieldViewModeAlways
} UITextFieldViewMode;


委托方法

1.点击return键盘消失

- (IBAction)CPasswordField_TouchDone:(id)sender {
    [sender resignFirstResponder];
}


2.点击return其他输入框转为焦点键盘切换为新的输入框服务(一般用于好多个输入框,输入完上一个点击下一个,的时候可以直接输入下一个)

- (IBAction)PasswordField_TouchNext:(id)sender {
    [self.CPasswordField becomeFirstResponder];
}


3.点击return直接触发其他摁钮等控件(一般用于登陆或者注册的时候最后一个输入框输入完之后点击键盘上的类似GO摁钮,直接触发下面的登陆摁钮或者注册摁钮)

- (IBAction)PasswordFieldDidGO:(id)sender {
   [sender resignFirstResponder];
   [self.LoginButton sendActionsForControlEvents:UIControlEventTouchUpInside];
    
}

文本框从开始编辑到结束的触发的几个状态委托

- (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对象,指明了被改变文字的位置,建议修改的文本也在其中  

     return YES;  
}  
- (BOOL)textFieldShouldClear:(UITextField *)textField{  

//返回一个BOOL值指明是否允许根据用户请求清除内容  
//可以设置在特定条件下才允许清除内容 

     return YES;  
}  
-(BOOL)textFieldShouldReturn:(UITextField *)textField{  

//返回一个BOOL值,指明是否允许在按下回车键时结束编辑  
  //如果允许要调用resignFirstResponder 方法,这回导致结束编辑,而键盘会被收起[textField resignFirstResponder];
//查一下resign这个单词的意思就明白这个方法了 

     return YES;  
}  


通知
UITextFieldTextDidChangeNotification
UITextFieldTextDidEndEditingNotification
UIKeyboardWillShowNotification   //键盘显示之前发送
UIKeyboardDidShowNotification    //键盘显示之后发送
UIKeyboardWillHideNotification   //键盘隐藏之前发送

UITextFieldTextDidBeginEditingNotification

当文本字段退出编辑模式时触发。通知的object属性存储了最终文本。

因为文本字段要使用键盘输入文字,所以下面这些事件发生时,也会发送动作通知

UIKeyboardDidHideNotification    //键盘隐藏之后发送


限制输入长度

- (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.UserNameField == textField || self.PasswordField == textField)  //判断是否时我们想要限定的那个输入框
    {
        if ([toBeString length] > 20) { //如果输入框内容大于20则弹出警告
            textField.text = [toBeString substringToIndex:20];
            return NO;
        }
    }
    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;
}




#define NUMBERS @”0123456789\n” (这个代表可以输入数字和换行,请注意这个\n,如果不写这个,Done按键将不会触发,如果用在SearchBar中,将会不触发Search事件,因为你自己限制不让输入\n,好惨,我在项目中才发现的。)
所以,如果你要限制输入英文和数字的话,就可以把这个定义为:

#define kAlphaNum   @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″。
当然,你还可以在以上方法return之前,做一提示的,比如提示用户只能输入数字之类的。如果你觉得有需要的话。

这种办法也可以用正则表达式去实现,后续还有一个正则的使用方法文章




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值