本文概要

1.简介

2.介绍TextField控件

3.介绍TextView控件

4.键盘的打开和关闭

5.关闭和大开键盘的通知

6.键盘的种类

详情

1.简介

与Label一样,TextField和TextView也是文本类控件,是可以编辑文本内容的。但是TextField和TextView比Label多了一个键盘的使用,另外TextField和Textview还各自有一个委托协议。通过学习一下内容,可以使得在TextField和TextView进入编辑状态时,键盘会从屏幕下方滑出来,点击return键可以关闭键盘。

2.介绍TextField控件

在UIKit框架中,TextField控件由UITextField类创建。此外,它还有对应的UITextFieldDelegate委托协议。委托可以帮助响应事件。TextField继承了UIControl,隶属于真正的“控件”,而TextView继承了UIScrollView。设置placeholder属性可以作为提示,比如textField.placeholder = @"请输入姓名";运行时该提示文本是浅灰色,当有输入动作时该文本消失。设置clearButtonMode属性可以确定TextField后面的清楚按钮的显示时机。比如myTextField.clearButtonMode = UITextFieldViewModeWhileEditing;

3.介绍TextView控件

TextView是一个可展示和编辑多行文本的控件,由UITextView类创建。它也有对应的UITextViewDelegate委托协议,我们可以借助委托来响应事件。

4.键盘的打开和关闭

一旦TextField和TextView等控件处于编辑状态,系统就会智能地弹出键盘,而不需要做任何额外的操作。但是关闭键盘就不像大开键盘这样顺利了,我们需要用代码去实现。

首先,我们要了解键盘不能自动关闭的原因。当TextField或者TextView处于编辑状态时,这些控件就会变成“第一响应者”。要想关闭键盘,就要放弃“第一响应者”的身份。在iOS中,事件沿着响应者链从一个响应者传到下一个响应者,如果其中一个响应者没有对事件做出响应,那么该事件会重新向下传递。

顾名思义,“第一响应者”是响应者链中的第一个,不同的控件成为“第一响应者”之后的“表现”不太一致。TextField和TextView等输入类型的控件会出现键盘,而我们只有让这些控件放弃它们的“第一响应者”身份,键盘才会关闭。为了实现,需要调用UIResponder类的resignFirstResponder方法,此方法一般在点击键盘的return键或者背景视图时调用。想要实现点击键盘的return键,调用这个方法,我们一般是放在它们各自的委托协议中去实现:

 #pragma mark -UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
} #pragma mark -UITextViewDelegate
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([text isEqualToString:@"\n"]) {
[textView resignFirstResponder];
return NO;
}
return YES;
}

想要实现点击背景视图时,调用这个方法,使用view的touchesBegan:触摸事件来实现对键盘的隐藏,当点击view的区域就会触发这个事件:

 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
[self.view endEditing:YES];
}

另外,如果界面中有很多控件,或者控件的位置比较靠近屏幕下方,控件就很可能会被弹出的键盘挡住,此时可以添加UIScrollView控件来解决。

5.关闭和打开键盘的通知

在关闭和打开键盘时,iOS系统分别会发出如下广播通知:UIKeyboardDidHideNotification(关闭时)和UIKeyboardDidShowNotification(打开时)。

使用广播通知时,需要注意在合适的时机注册和解除通知,下边的举例在ViewController中分别在viewWillAppear:方法中注册通知,在viewWillDisappear:方法中解除通知。

 - (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated]; //注册键盘出现通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; //注册键盘隐藏通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
} - (void)viewWillDisappear:(BOOL)animated
{
//解除键盘出现通知
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil]; //解除键盘隐藏通知
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
} - (void)keyboardDidShow: (NSNotification *)notif
{
NSLog(@"键盘打开");
} - (void)keyboardDidHide: (NSNotification *)notif
{
NSLog(@"键盘隐藏");
}

6.键盘的种类

有输入动作的控件有三个属性用来设置与键盘相关的属性。比如系统提供了11种类型的键盘,选择不同的键盘类型,会在iOS上弹出不同的键盘。而且可以设置return键的文本,如果控件内输入的是查询条件,我们可以将return键的文本设置为Go或者search,示意接下来进行的就是查找动作。最后可以设置键盘的外观。需要说明的是,这些设置是具体到某个有输入动作的控件而言的。代码举例如下:

     //设置键盘的类型(枚举值)
myTextField.keyboardType = UIKeyboardTypeDefault; //设置键盘的Return键的文本(枚举值)
myTextField.returnKeyType =UIReturnKeyDone; //设置键盘的外观(枚举值)
myTextField.keyboardAppearance=UIKeyboardAppearanceDark;

TextField和TextView的更多相关文章

  1. textField和textView限制输入条件

    以下两法方法都是实现textfield和textView的代理方法  需要先遵循代理 一:textField限制只能输入数字和小数点 且小数点后只能保留两位 小数点前最多5位 - (BOOL)text ...

  2. 【Swift】图文混排,ios开发中在textfield或textView中插入图片

    在ios开发中,我们一般都是在textfield或者textView中输入文字.当我们需要插入图片的时候其实也是很简单的 我们需要利用的textfield,textView的属性化文本,将图片以附件的 ...

  3. IOS 开发之-- textfield和textview,return键的改变,点击return键

    IOS 开发之-- textfield和textview,return键的改变,点击return键 一,textfield的return键改变 方案1.改变键盘右下角的换行(enter)键为完成键,后 ...

  4. TextField和TextView的限制输入长度

    TextField的限制代理方法 只需要在这个代理方法里面code这样的代码就可以了 16 是长度可以自己设置 - (BOOL)textField:(UITextField *)textField s ...

  5. IOS textField(textview)字数判断

    textfield 有时会需要设置字数限制,如果只是英文或者符号,可以直接在以下代理方法中判断字数 -(BOOL)textField:(UITextField *)textField shouldCh ...

  6. swift textfield 和 textview 实时获取 输入内容

    textfield : func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replac ...

  7. iOS 处理键盘遮挡TextField、TextView问题

    之前处理键盘遮挡问题都是在每一个控制器进行单独处理,这样做真的是非常的费事,今天在做项目的时候就想到自己封装一个,记录一下这个“跌宕起伏”的过程. 思路是这样的:计算文本编辑控件Frame与键盘Fra ...

  8. 长按TextField或TextView显示中文的粘贴复制

    首先要确保手机当前系统为中文,只需要在 plist 文件中添加 Localized resources can be mixed = YES 就行了

  9. 如何把textfield或者textview中长按出现的(全选,复制,粘贴)显示成中文

    ios在配置文件info.plist 中添加Localiztion native development region (本地化设置) 设置为 china

随机推荐

  1. Spring源码解析一:IOC容器设计

    一.IOC接口设计 IOC容器设计的源码主要在spring-beans.jar.spring-context.jar这两个包中.IOC容器主要接口设计如下: 这里的接口设计有两条主线:BeanFact ...

  2. RDLC系列(一)ASP.NET RDLC 报表自定义数据源

    最近一段时间开发ERP系统中要用到不少报表打印,在网上找了一圈发现想些好用的报表控件大部分要收费,一些面免费要么不好用要么IE8不兼容,最后还是用了微软自带的RDLC报表,把自己遇到的坑和技巧整理分享 ...

  3. [转]支持向量机SVM总结

    首先,对于支持向量机(SVM)的简单总结: 1. Maximum Margin Classifier 2. Lagrange Duality 3. Support Vector 4. Kernel 5 ...

  4. Linux TCP连接数修改

    一.           文件数限制修改 (1)   vi /etc/security/limits.conf *  soft nofile 10240    *  hard nofile 10240 ...

  5. 微信公众平台开发-access_token获取及应用(含源码)

    微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 很多系统中都有access_token参数,对于微信公众平台的access_to ...

  6. [LintCode]快速幂(数论)

    计算a^n % b,其中a,b和n都是32位的整数. 快速幂搞就过了.快速幂首先就是要知道 (a*b)%c = ((a%c)*b)%c ,所以经过推导得出. (a^n)%b = ((((a%b)*a) ...

  7. github 删除远程仓库项目中的任意文件夹

    今天上传代码把不需要的push上去了.结果想删除那个不想要的怎么弄都不行.网上大部分都是把那个项目整个暴力删除.那可不行啊那么多都删除.下次上传不是要命啊! 试啊试终于解决了.顺便记录一下也帮助下需要 ...

  8. wemall app商城源码Android中ViewHolder详细解释

    1.ViewHolder的解释: (1).只是一个静态类,不是Android的API方法. (2).它的作用就在于减少不必要的调用findViewById,然后把对底下的控件引用存在ViewHolde ...

  9. java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4

    概述 信息安全基本概念: DES(Data Encryption Standard,数据加密标准) 3DES(Triple DES,三重数据加密算法(TDEA,Triple Data Encrypti ...

  10. JavaScript数据结构——链表的实现

    前面楼主分别讨论了数据结构栈与队列的实现,当时所用的数据结构都是用的数组来进行实现,但是数组有的时候并不是最佳的数据结构,比如在数组中新增删除元素的时候需要将其他元素进行移动,而在javascript ...