当前位置:   article > 正文

IOS开发实战:UITextField文本输入框控件_xcode 获取 uitextfield 文字

xcode 获取 uitextfield 文字

一,创建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];
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
initWithFrame是UITextField类的初始化方法
该初始化方法需要传入一个CGRect类型的结构体(绘制矩形)
CGRectMake()方法可以构造出一个CGRect类型的结构体
其中4个参数分别为x坐标,y坐标,高度,宽度,
决定了UITextField控件在屏幕上的位置和尺寸

注意:
    UI坐标系中,横向为x轴,向右增大,纵向y轴,向下增大,即原点在左上角

UITextField类中placeholder属性用于设置提示文字,当输入内容不为空时消失;
UITextField的borderStyle属性用于设置输入框的界面风格,枚举值如下:
    UITextBorderStyleNone        // 无风格
    UITextBorderStyleLine        // 线性风格
    UITextBorderStyleBezel       // bezel风格
    UITextBorderStyleRoundedRect // 边框风格
调用UIView类的addSubview方法后,将textField控件添加到当前视图上
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3,运行程序
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

以上是UITextField的简单实现,除此之外,UITextField还有些其他常用属性


二,设置字体和对齐模式

为textField添加以下代码:

    // 设置字体颜色
    textField.textColor = [UIColor redColor];
    // 设置字体
    textField.font = [UIFont systemFontOfSize:14];
    // 设置对齐模式
    textField.textAlignment = NSTextAlignmentCenter;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

运行程序:
这里写图片描述

如图:
文本输入框中的文字字体颜色为红色,系统字体14号,居中显示


三,带左视图的textView

为textField添加以下代码:

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

图片添加请查看:
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按钮后调用
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

重点说一下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
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

      

五,监听输入信息的用户名输入框

需要做如下几部操作:

1,遵守相应的协议
2,设置代理
3,实现代理方法
  • 1
  • 2
  • 3

1,在类的声明部分添加要遵守的代理协议

@interface ViewController ()<UITextFieldDelegate>
@end
  • 1
  • 2

2,viewDidLoad方法添加代理设置:

textField.delegate = self;
  • 1

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

运行程序:

这里写图片描述

当输入非数字和超过11位数字时,Log如下:

2018-05-10 16:11:00.611 UITextField[1432:466399] 请输入数字
2018-05-10 16:11:10.475 UITextField[1432:466399] 超过11位
  • 1
  • 2

六,完整代码:

//
//  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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/322109
推荐阅读
相关标签
  

闽ICP备14008679号