一,创建UITextField文本输入框项目
1,打开Xcode,创建名为UITextField的工程
如何创建工程:Xcode创建HelloWorld项目
2,在ViewController.m的viewDidLoad方法中添加如下代码:
- (void)viewDidLoad { [super viewDidLoad]; // 初始化UITextField,并规定一个矩形区域 UITextField * textField = [[UITextField alloc]initWithFrame:CGRectMake(20, 100, 280, 30)]; // 设置输入框界面风格,枚举如下: // UITextBorderStyleNone // 无风格 // UITextBorderStyleLine // 线性风格 // UITextBorderStyleBezel // bezel风格 // UITextBorderStyleRoundedRect // 边框风格 textField.borderStyle = UITextBorderStyleRoundedRect; // 设置提示文字 textField.placeholder = @"请输入文字"; // 将控件添加到当前视图上 [self.view addSubview:textField]; }
initWithFrame是UITextField类的初始化方法 该初始化方法需要传入一个CGRect类型的结构体(绘制矩形) CGRectMake()方法可以构造出一个CGRect类型的结构体 其中4个参数分别为x坐标,y坐标,高度,宽度, 决定了UITextField控件在屏幕上的位置和尺寸 注意: UI坐标系中,横向为x轴,向右增大,纵向y轴,向下增大,即原点在左上角 UITextField类中placeholder属性用于设置提示文字,当输入内容不为空时消失; UITextField的borderStyle属性用于设置输入框的界面风格,枚举值如下: UITextBorderStyleNone // 无风格 UITextBorderStyleLine // 线性风格 UITextBorderStyleBezel // bezel风格 UITextBorderStyleRoundedRect // 边框风格 调用UIView类的addSubview方法后,将textField控件添加到当前视图上
3,运行程序
以上是UITextField的简单实现,除此之外,UITextField还有些其他常用属性
二,设置字体和对齐模式
为textField添加以下代码:
// 设置字体颜色 textField.textColor = [UIColor redColor]; // 设置字体 textField.font = [UIFont systemFontOfSize:14]; // 设置对齐模式 textField.textAlignment = NSTextAlignmentCenter;
运行程序:
如图:
文本输入框中的文字字体颜色为红色,系统字体14号,居中显示
三,带左视图的textView
为textField添加以下代码:
// 初始化一个 UIImageView * imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"image"]]; // 设置左视图 textField.leftView = imageView; // 设置左视图显示模式. 枚举值如下: // UITextFieldViewModeNever 从不显示 // UITextFieldViewModeWhileEditing 编辑时显示 // UITextFieldViewModeUnlessEditing 非编辑时显示 // UITextFieldViewModeAlways 总是显示 textField.leftViewMode = UITextFieldViewModeAlways;
图片添加请查看:
IOS开发实战:UIButton按钮控件 中”为UIButton添加背景和内容图片”部分
运行程序:
四,UITextField的代理方法
向UITextField输入一个字符,触发一个回调,监听输入框,允许开发者介入逻辑,需要通过代理的方法实现
以下是UITextFieldDelegate支持的代理方法:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField; // 当输入框将要开始编辑时 - (void)textFieldDidBeginEditing:(UITextField *)textField; // 当输入框已经开始编辑时 - (BOOL)textFieldShouldEndEditing:(UITextField *)textField; // 当输入框将要结束编辑时 - (void)textFieldDidEndEditing:(UITextField *)textField; // 当输入框已经结束编辑时 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange: (NSRange)range replacementString:(NSString *)string; // 输入框中的内容将要改变时 - (BOOL)textFieldShouldClear:(UITextField *)textField; // 用户点击清除按钮时 - (BOOL)textFieldShouldReturn:(UITextField *)textField; // 用户按键盘上的return键后 textFieldShouldBeginEditing: 用户单击输入框,键盘要弹时被调用 若返回fasle,键盘不会弹出,UITextField不会进入编辑状态 textFieldDidBeginEditing: 在UITextField已经开始编辑状态时触发 textFieldShouldEndEditing: 与textFieldShouldBeginEditing相似,对应编辑结束状态 textFieldDidEndEditing: 在UITextField已经结束编辑状态时触发 shouldChangeCharactersInRange: 输入框内容将要改变时被调用 参数range:将要改变的字符范围 参数string:将要替换成的字符串 若返回NO,本次改变失败 textFieldShouldClear: 用户单击清除按钮后调用 若返回NO,本次清除无效 textFieldShouldReturn: 用户反击return按钮后调用
重点说一下shouldChangeCharactersInRange:
方法- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange: (NSRange)range replacementString:(NSString *)string 功能: 把textField中位置为range的字符串替换为string字符串; 此函数在textField内容被修改时调用; 返回值: YES,表示修改生效;NO,表示不做修改,textField的内容不变。 参数说明: textField:响应UITextFieldDelegate协议的UITextField控件。 range: UITextField控件中光标选中的字符串,即被替换的字符串; range.length为0时,表示在位置range.location插入string。 string: 替换字符串; string.length为0时,表示删除。
五,监听输入信息的用户名输入框
需要做如下几部操作:
1,遵守相应的协议 2,设置代理 3,实现代理方法
1,在类的声明部分添加要遵守的代理协议
@interface ViewController ()<UITextFieldDelegate>@end
2,viewDidLoad方法添加代理设置:
textField.delegate = self;
3,viewController添加代理方法shouldChangeCharactersInRange的实现:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange: (NSRange)range replacementString:(NSString *)string { if(string.length > 0){ // 判断是否为数字 if([string characterAtIndex:0] <'0' || [string characterAtIndex:0] >'9'){ NSLog(@"请输入数字"); return NO; } // 判断总长度不能大于11位 if(textField.text.length + string.length > 11){ NSLog(@"超过11位"); return NO; } } return YES; }
运行程序:
当输入非数字和超过11位数字时,Log如下:
2018-05-10 16:11:00.611 UITextField[1432:466399] 请输入数字 2018-05-10 16:11:10.475 UITextField[1432:466399] 超过11位
六,完整代码:
//// ViewController.m// UITextField//// Created by Brave on 18/5/9.// Copyright © 2018年 com.Brave. All rights reserved.//#import "ViewController.h"// 添加要遵守的代理 UITextFieldDelegate// - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField; // 当输入框将要开始编辑时// - (void)textFieldDidBeginEditing:(UITextField *)textField; // 当输入框已经开始编辑时// - (BOOL)textFieldShouldEndEditing:(UITextField *)textField; // 当输入框将要结束编辑时// - (void)textFieldDidEndEditing:(UITextField *)textField; // 当输入框已经结束编辑时// - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; // 输入框中的内容将要改变时// - (BOOL)textFieldShouldClear:(UITextField *)textField; // 输入框中的内容将被清除时// - (BOOL)textFieldShouldReturn:(UITextField *)textField; // 用户按键盘上的return键后@interface ViewController ()<UITextFieldDelegate>@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // 初始化UITextField,并规定一个矩形区域 UITextField * textField = [[UITextField alloc]initWithFrame:CGRectMake(20, 100, 280, 30)]; // 设置输入框界面风格,枚举如下: // UITextBorderStyleNone // 无风格 // UITextBorderStyleLine // 线性风格 // UITextBorderStyleBezel // bezel风格 // UITextBorderStyleRoundedRect // 边框风格 textField.borderStyle = UITextBorderStyleRoundedRect; // 设置提示文字 textField.placeholder = @"请输入文字"; // 设置字体颜色 textField.textColor = [UIColor redColor]; // 设置字体 textField.font = [UIFont systemFontOfSize:14]; // 设置对齐模式 textField.textAlignment = NSTextAlignmentCenter; // 初始化一个 UIImageView * imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"image"]]; // 设置左视图 textField.leftView = imageView; // 设置左视图显示模式. 枚举值如下: // UITextFieldViewModeNever 从不显示 // UITextFieldViewModeWhileEditing 编辑时显示 // UITextFieldViewModeUnlessEditing 非编辑时显示 // UITextFieldViewModeAlways 总是显示 textField.leftViewMode = UITextFieldViewModeAlways; // 添加代理设置 textField.delegate = self; // 将控件添加到当前视图上 [self.view addSubview:textField]; } - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if(string.length > 0){ // 判断是否为数字 if([string characterAtIndex:0] <'0' || [string characterAtIndex:0] >'9'){ NSLog(@"请输入数字"); return NO; } // 判断总长度不能大于11位 if(textField.text.length + string.length > 11){ NSLog(@"超过11位"); return NO; } } return YES; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦