博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS开发实战:UITextField文本输入框控件
阅读量:2222 次
发布时间:2019-05-08

本文共 7144 字,大约阅读时间需要 23 分钟。

一,创建UITextField文本输入框项目

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号,居中显示


三,带左视图的textView

为textField添加以下代码:

// 初始化一个    UIImageView * imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"image"]];    // 设置左视图    textField.leftView = imageView;    // 设置左视图显示模式. 枚举值如下:    // UITextFieldViewModeNever         从不显示    // UITextFieldViewModeWhileEditing  编辑时显示    // UITextFieldViewModeUnlessEditing 非编辑时显示    // UITextFieldViewModeAlways        总是显示    textField.leftViewMode = UITextFieldViewModeAlways;

图片添加请查看:

中”为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 ()
@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
你可能感兴趣的文章
探索Redis设计与实现2:Redis内部数据结构详解——dict
查看>>
探索Redis设计与实现3:Redis内部数据结构详解——sds
查看>>
探索Redis设计与实现4:Redis内部数据结构详解——ziplist
查看>>
探索Redis设计与实现6:Redis内部数据结构详解——skiplist
查看>>
探索Redis设计与实现5:Redis内部数据结构详解——quicklist
查看>>
探索Redis设计与实现8:连接底层与表面的数据结构robj
查看>>
探索Redis设计与实现7:Redis内部数据结构详解——intset
查看>>
探索Redis设计与实现9:数据库redisDb与键过期删除策略
查看>>
探索Redis设计与实现10:Redis的事件驱动模型与命令执行过程
查看>>
分布式系统理论基础1: 一致性、2PC和3PC
查看>>
分布式系统理论基础2 :CAP
查看>>
分布式系统理论基础3: 时间、时钟和事件顺序
查看>>
分布式系统理论基础4:Paxos
查看>>
分布式系统理论基础5:选举、多数派和租约
查看>>
分布式系统理论基础6:Raft、Zab
查看>>
分布式系统理论进阶7:Paxos变种和优化
查看>>
分布式系统理论基础8:zookeeper分布式协调服务
查看>>
搞懂分布式技术1:分布式系统的一些基本概念
查看>>
搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法
查看>>
搞懂分布式技术3:初探分布式协调服务zookeeper
查看>>