本文共 7144 字,大约阅读时间需要 23 分钟。
1,打开Xcode,创建名为UITextField的工程
如何创建工程: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号,居中显示为textField添加以下代码:
// 初始化一个 UIImageView * imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"image"]]; // 设置左视图 textField.leftView = imageView; // 设置左视图显示模式. 枚举值如下: // UITextFieldViewModeNever 从不显示 // UITextFieldViewModeWhileEditing 编辑时显示 // UITextFieldViewModeUnlessEditing 非编辑时显示 // UITextFieldViewModeAlways 总是显示 textField.leftViewMode = UITextFieldViewModeAlways;
图片添加请查看:
中”为UIButton添加背景和内容图片”部分运行程序:
向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 ()@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 ()@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