赞
踩
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号,居中显示
为textField添加以下代码:
// 初始化一个
UIImageView * imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"image"]];
// 设置左视图
textField.leftView = imageView;
// 设置左视图显示模式. 枚举值如下:
// UITextFieldViewModeNever 从不显示
// UITextFieldViewModeWhileEditing 编辑时显示
// UITextFieldViewModeUnlessEditing 非编辑时显示
// UITextFieldViewModeAlways 总是显示
textField.leftViewMode = UITextFieldViewModeAlways;
图片添加请查看:
IOS开发实战:UIButton按钮控件 中”为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 ()<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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。