UITextField总结大全

来源:互联网 发布:淘宝店主跑路 编辑:程序博客网 时间:2024/05/17 03:49

 图形操作的基础知识

    

1Text :设置文本框的默认文本。

2Placeholder  可以在文本框中显示灰色的字,用于提示用户应该在这个文本框输入什么内容。当这个文本框中输入了数据时,用于提示的灰色的字将会自动消失。

3Background 

4Disabled  若选中此项,用户将不能更改文本框内容。

5、接下来是三个按钮,用来设置对齐方式。

6Border Style  选择边界风格。

7Clear Button  这是一个下拉菜单,你可以选择清除按钮什么时候出现,所谓清除按钮就是出一个现在文本框右边的小 ,你可以有以下选择:

    7.1 Never appears  从不出现

    7.2 Appears while editing  编辑时出现

    7.3 Appears unless editing  

    7.4 Is always visible  总是可见

8Clear when editing begins  若选中此项,则当开始编辑这个文本框时,文本框中之前的内容会被清除掉。比如,你现在这个文本框 中输入了 "What" ,之后去编辑文本框 B,若再回来编辑文本框 ,则其中的"What" 会被立即清除。

9Text Color  设置文本框中文本的颜色。

10Font  设置文本的字体与字号。

11Min Font Size  设置文本框可以显示的最小字体(不过我感觉没什么用)

12Adjust To Fit  指定当文本框尺寸减小时,文本框中的文本是否也要缩小。选择它,可以使得全部文本都可见,即使文本很长。但是这个选项要跟 Min Font Size 配合使用,文本再缩小,也不会小于设定的 Min Font Size 

接下来的部分用于设置键盘如何显示。

13Captitalization  设置大写。下拉菜单中有四个选项:

    13.1 None  不设置大写

    13.2 Words  每个单词首字母大写,这里的单词指的是以空格分开的字符串

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

    13.4 All Characters  所以字母大写

14Correction  检查拼写,默认是 YES 

15Keyboard  选择键盘类型,比如全数字、字母和数字等。

16Appearance

17Return Key  选择返回键,可以选择 Search  Return  Done 等。

18Auto-enable Return Key  如选择此项,则只有至少在文本框输入一个字符后键盘的返回键才有效。

19Secure  当你的文本框用作密码输入框时,可以选择这个选项,此时,字符显示为星号。

1.Alignment Horizontal 水平对齐方式

2.Alignment Vertical 垂直对齐方式

3.用于返回一个BOOL  输入框是否 Selected(选中) Enabled(可用) Highlighted(高亮)

代码创建UITextField

创建:

UITextField* myTextField = [[UITextField alloc]initWithFrame:CGRectMake(50, 100, 200, 50)]; 

基本属性:

  1. myTextField.textAlignment = UITextAlignmentLeft;//默认就是左对齐,这个是UITextField扩展属性    
  2. textUserName.borderStyle = UITextBorderStyleNone;//让文本框四个角为直角。
  3. myTextField.borderStyle = UITextBorderStyleBezel;//默认是没有边框,如果使用了自定义的背景图片边框会被忽略掉    
  4. myTextField.placeholder = @"请在此输入账号";//为空白文本字段绘制一个灰色字符串作为占位符 ,可以不用将clearsOnBeginEditing = YES    
  5. myTextField.clearsOnBeginEditing = YES;//设置为YES当用点触文本字段时,字段内容会被清除    
  6. myTextField.adjustsFontSizeToFitWidth = YES;//设置为YES时文本会自动缩小以适应文本窗口大小。默认是保持原来大小,而让长文本滚动    
  7. //myTextField.background = [UIImage imageNamed:@"registBtn"];//可以接受UIImage对象,此项设置则边框失效。    
  8. myTextField.clearButtonMode = UITextFieldViewModeUnlessEditing;//右边显示的'X'清除按钮  
  9.   textaPassword.clearButtonMode = UITextFieldViewModeWhileEditing;//当编辑的时候显示X
  10. passwordTextField.secureTextEntry = YES;//密码输入框
  11. field.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;//UITextField垂直居中对齐。
  12.  myTextField.delegate = self;//委托类需要遵守UITextFieldDelegate协议
  13.  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个其它方法。

61

这里我们在编辑过程中消息的发送,UITextField编辑过程中与UITextFieldDelegate委托对象之间交互过程。

71

 

 - (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    //键盘隐藏之后发送