UITextFiled输入框的使用(详细)
来源:互联网 发布:postgresql mysql区别 编辑:程序博客网 时间:2024/05/29 12:25
UITextFiled输入框的使用1.基本使用<1>UITextField的基本使用[重点] <2>键盘回收(别忘了设置代理)[重点]2.属性的设置 <1>字体 <2>文本颜色 <3>设置密码输入键盘 <4>设置键盘类型 <5>设置清除模式 <6>设置空白提示 <7>设置是否自动大写 <8>是否自动显示修正后的单词<9>设置文本对齐方式 <10>设置背景图片 <11>左侧提示图片3.项目中常用(扩展知识, 现在不是特别会也没什么关系) <1>键盘事件的处理(使用通知) <2>点击背景则回收键盘(背景图片添加手势) <3>输入长度的控制 <4>自定义键盘(emoji表情) <5>键盘上的附件区域<6>email地址验证(正则表达式)==============知识点详解==============<1>UITextField的基本使用 UITextField *nameTextField = [[UITextField alloc] init]; //设置位置 nameTextField.frame = CGRectMake(100, 100, 200, 30); //细节: 输入框有边框类型的, 如果直接创建, 不会显示边框 // UITextBorderStyleNone没有边框. 需要设置背景图片 nameTextField.borderStyle = UITextBorderStyleRoundedRect; //显示出来 [self.view addSubview:nameTextField];<2>键盘回收(别忘了设置代理) //细节: 系统不会自动回收键盘, 需要我们编程实现 //具体应该如何实现? // 输入框有很多事件(开始编辑, 结束编辑, 文本改变,返回) //需求: 我们需要去处理这些事件, 但是问题何在? //存在的问题: 我们预先不知道用户什么时候进行这些操作 // 但是textFiled自己知道用户什么时候进行操作 //解决的方式: 当textFiled事件发生了之后, 通知我们进行处理 //使用代理 //<1> 设置代理 // 协议中规定了代理对象发送的消息 //<2>让self所在的类遵守delegate指定的协议 //<3>需要实现协议中必须实现的方法 nameTextField.delegate = self;//这个方法是键盘上的Return被点击之后执行// 这个方法是由 textFiled调用的// textFiled保存了当前的对象指针 self.delegate// 当事件发生的时候, 会通过self.delegate调用现在这个方法- (BOOL)textFieldShouldReturn:(UITextField *)textField;{ //输入框上点击了之后, 获得了焦点, 输入框变成第一响应者 // 自动弹出虚拟键盘 //如何回收键盘 //意思: 放弃作为第一响应者 [textField resignFirstResponder]; return YES;}<3>字体nameTextField.font = [UIFont systemFontOfSize:24]; <4>文本颜色nameTextField.textColor = [UIColor redColor];<5>设置密码输入键盘 //添加一个密码输入框 UITextField *passwordTextField = [[UITextField alloc] initWithFrame:CGRectMake(100, 140, 200, 30)]; passwordTextField.borderStyle = UITextBorderStyleRoundedRect; passwordTextField.delegate = self; [self.view addSubview:passwordTextField]; passwordTextField.secureTextEntry = YES; <6>设置键盘类型//需求: 输入框输入的只是电话号的话 nameTextField.keyboardType = UIKeyboardTypePhonePad; <7>设置清除模式 //细节: 这个按键只有在输入框中有文本的时候才会出现 nameTextField.clearButtonMode = UITextFieldViewModeAlways; passwordTextField.clearButtonMode = UITextFieldViewModeAlways; <8>设置空白提示 //细节: 空白提示会在输入文本后自动消失 nameTextField.placeholder = @"用户名"; passwordTextField.placeholder = @"密码"; <9>设置是否自动大写 //需求: 去掉自动大小写 nameTextField.autocapitalizationType = UITextAutocapitalizationTypeNone; <10>是否自动显示修正后的单词 //需求: 关闭拼写自动提示 nameTextField.autocorrectionType = UITextAutocorrectionTypeNo;<11>设置文本对齐方式 nameTextField.textAlignment = NSTextAlignmentCenter; 项目中常用(扩展知识, 现在不是特别会也没什么关系) <1>设置背景图片//细节: 边框类型需要设置UITextBorderStyleNone nameTextField.background = [UIImage imageNamed:@"inputImage.png"]; <2>左侧提示图片 UIImageView *headView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 25, 25)]; headView.image = [UIImage imageNamed:@"logo64X64.png"]; nameTextField.leftView = headView; [headView release]; //细节: 需要左侧视图的显示模式 nameTextField.leftViewMode = UITextFieldViewModeAlways; <3>键盘事件的处理(使用通知)——解决遮挡的问题 //需求: 虚拟键盘弹出后遮挡住的控件显示出来 //使用ios系统事件通知来解决 // 什么是 事件通知??? // 生活: 邮件到了之后, 门房通知我们 // (1)需要告诉系统, 我们要用哪个方法去处理这个事件 // (2)事件的处理方法中完成, 控件遮挡的处理 //获取一个通知中心的单例对象 //参数name: 表示事件的名称 // UIKeyboardWillShowNotification键盘即将显示 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dealKeyboadShow:) name:UIKeyboardWillShowNotification object:nil]; //键盘隐藏的事件通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dealKeyboadHide:) name:UIKeyboardWillHideNotification object:nil];//键盘显示事件通知的处理方法-(void)dealKeyboadShow:(NSNotification *)noti{ NSLog(@"dealKeyboadShow"); [UIView beginAnimations:@"" context:nil]; [UIView setAnimationDuration:0.5]; //处理键盘的遮挡 loginButton.frame = CGRectMake(100, 210, 80, 30); registerButton.frame = CGRectMake(190, 210, 80, 30); [UIView commitAnimations];}-(void)dealKeyboadHide:(NSNotification *)noti{ NSLog(@"dealKeyboadShow"); [UIView beginAnimations:@"" context:nil]; [UIView setAnimationDuration:0.5]; //处理键盘的遮挡 loginButton.frame = CGRectMake(100, 300, 80, 30); registerButton.frame = CGRectMake(190, 300, 80, 30); [UIView commitAnimations];} <4>点击背景则回收键盘(背景图片添加手势) //重点: 处理背景图片的点击事件 //需要做的事情: 为图片添加点击事件处理? //新的知识点: 手势 //创建了轻击手势 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backImageClick:)]; //为背景图添加轻击手势 backView.userInteractionEnabled = YES; [backView addGestureRecognizer:tap]; [tap release];-(void)backImageClick:(UITapGestureRecognizer *)tap{ NSLog(@"backImageClick"); [nameTextField resignFirstResponder]; [passwordTextField resignFirstResponder]; } <5>自动切换到下一个输入框//实现方法回收键盘-(BOOL)textFieldShouldReturn:(UITextField *)textField{ [textField resignFirstResponder]; //如果是第一个输入框输完了, 切换到下一个中进行输入 //表示: 如果两个指针相等, 则为同一对象 if(textField == nameTextField) { //密码输入框变成第一响应者 [passwordTextField becomeFirstResponder]; } return YES;} <6>输入长度的控制 //是在文本输入框中每次插入文本的时候执行-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ //需求: 限制输入的长度为8个字符以下 //有问题版本 /* if (nameTextField.text.length<8) { return YES; } */ if(textField == nameTextField) { NSMutableString *mstr = [NSMutableString stringWithString:nameTextField.text]; //获取插入之后的字符串 [mstr insertString:string atIndex:range.location]; return mstr.length <= 8; } return YES;} <7>自定义键盘(emoji表情) //如何自定义键盘??? //创建一个自定义键盘(一个view上摆了很多button) messageTextField.inputView = [self createEmotionView];//获取创建的表情键盘-(UIView *)createEmotionView{ UIView *myEmotionView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 160)]; myEmotionView.backgroundColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.5]; //CTRL+CMD+SPACE NSArray *buttonTitleArray = [NSArray arrayWithObjects:@" 4 0